【发布时间】:2012-08-09 03:41:51
【问题描述】:
首先让我提供上下文:
在 C# 中,传递给方法的对象是通过引用传递的。仅当使用关键字 new 重新实例化传入的对象时,引用才会丢失@
所以,我喜欢做 var obj = Alter(obj)(方法 1) 之类的事情,即我传入一个对象并返回该对象。与执行等效操作相反:Alter(obj) (method 2) 引用对象的更改相同,除了通过引用而不是返回副本。我认为第一个更好,因为如果某些冒失的编码员后来修改代码以使用关键字“new”......现有代码不会烧毁和死亡。
我的问题是方法 1 会比 方法 2 使用更多的内存,还是会导致任何其他性能下降?即这会更频繁地调用 GC 吗?
答案是否定的
【问题讨论】:
-
不知道你是不是想根据
Alter(obj)的具体实现来问这个问题? -
不,这是一个普遍的问题。我在方法 1 之后设计了我的代码,因为我认为它更具防御性。我只是想再次确认我没有做破坏性的事情,因为在大多数情况下这是不必要的(但在我看来更好的风格)。
-
你认为方法1在什么方面更“防御”?
-
您能否发布一个简短的代码示例来说明您在此处保护的问题?如果我理解正确,那么您会误解在方法中重新设置为新对象的对象引用会发生什么。事实上……如果我理解你的话,你似乎有倒退……所以,我一定不是正确地理解你。
-
@LLL:不……不要。为什么不是这些实例方法?它们只有一个输入,也可以是
this参考,现在您有了更好的设计和更少的问题。
标签: c# .net performance garbage-collection styles