与POV Performance / MemoryUsage在返回条件之前或之后初始化对象有什么不同,如“示例”中所示:
Function Foo() as ComplexObject
' is there a difference ??? '
' A '
' Dim obj as New ComplexObject() '
If condition Then Return Nothing
' is there a difference ??? '
' B '
Dim obj as New ComplexObject()
...
Return obj
End Function
答案 0 :(得分:2)
如果你的意思,但比较:
Dim obj as New ComplexObject()
在 If condition Then Return Nothing
之前 ,然后是:有一个区别:它之前完成,然后每次将 new
一个对象,即使它很快被丢弃并从gen-0收集(对于返回Nothing
的情况)。但是,如果你只是在New
之前声明它(没有If
),那么两者应该是相同的(局部变量的位置是无关紧要的,因为所有本地人都在IL是方法范围的。)
我不知道VB,但在C#中你也可以使用条件运算符:
return condition ? null : new ComplexObject();
答案 1 :(得分:1)
唯一的区别是在返回之前创建对象Nothing将使用更多的CPU - 无论是哪种方式,对象都将被正确地垃圾收集,以及何时不再被引用。
我赞成尽可能晚地定义/声明变量。
答案 2 :(得分:1)
是的,因为您正在分配一个本地对象,一旦它离开该方法就需要进行垃圾回收,这是有区别的。