方法中的对象初始化

时间:2010-07-17 22:23:19

标签: .net

与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

3 个答案:

答案 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)

是的,因为您正在分配一个本地对象,一旦它离开该方法就需要进行垃圾回收,这是有区别的。