处置对象

时间:2010-11-17 18:42:38

标签: .net vb.net garbage-collection

GC如何处理在以下两种情况下创建的对象?

1)

Private Function DoSomething() As Boolean
   Return New DatabaseManager().Insert()
End Function

2)

Private Function DoSomething() As Boolean
   Dim mngr As New DatabaseManager()
   Return mngr.Insert()
End Function

在选项1中,我不创建局部变量来保存对象的引用。在选项2中,我将参考保存在局部变量中。

哪个选项更好,为什么? (如果有的话)

2 个答案:

答案 0 :(得分:4)

  

如您所见,在选项1中,我不创建局部变量来保存对象的引用

您可能没有明确地创建它,但请相信我在IL级别,编译器发出的是创建对象的实例,因为您无法在没有实例的对象上调用实例方法。

这些在垃圾收集方面是等价的,编译器可能会优化它。并且因为它们当然是等同的,所以首选的是涉及更少代码并且对您更具可读性的那个。对我来说这是第一次,但它可能是主观的,所以这取决于你。

答案 1 :(得分:2)

没有区别,JIT编译器将为两者生成完全相同的机器代码。 DataBaseManager对象对垃圾收集器是可见的,通常作为Insert方法中的 Me 引用保存在CPU寄存器中。之后运行的任何GC都会清理它。