调用其他构造函数的构造函数:任何性能问题?

时间:2011-05-06 18:41:26

标签: .net performance constructor method-chaining

在性能至关重要的应用程序中, Scenario 1 (完全独立的构造函数)与 Scenario 2 (链调用构造函数)之间是否有明显的优势?

情景1

Class TwoInts

    Private a, b As Integer

    Public Sub New(ByVal a As Integer, ByVal b As Integer)
        Me.a = a
        Me.b = b
    End Sub

    Public Sub New(ByVal a As Integer)
        Me.a = a
        Me.b = 0
    End Sub

    Public Sub New()
        Me.a = 0
        Me.b = 0
    End Sub

End Class

场景2

Class TwoInts

    Private a, b As Integer

    Public Sub New(ByVal a As Integer, ByVal b As Integer)
        Me.a = a
        Me.b = b
    End Sub

    Public Sub New(ByVal a As Integer)
        Me.New(a, 0)
    End Sub

    Public Sub New()
        Me.New(0)
    End Sub

End Class

4 个答案:

答案 0 :(得分:4)

不,不会有明显的差异。

您可以运行自己的基准测试并找出答案。

答案 1 :(得分:0)

速度不应该大不相同。从裸露的构造函数到深度构造函数只有2个调用...但是:

你应该问C#语言它对构造函数的看法是什么:P 在那里它不会很好,所以我认为你应该坚持使用不同的方法,如制作一个“初始化方法”,并从每个构造函数调用,并具有更可读的代码。在那里你需要使用“:this(0)”符号,它不是那么可读(例如,阅读它时的程序)。而且只需少一点就可以达到某种程度。

答案 2 :(得分:0)

这取决于你明显的意思。场景1确实引入了额外的调用,但它添加的时间将以毫秒为单位进行测量。场景2会更快。 (它还会增加生成代码的大小。)

答案 3 :(得分:0)

不要使用MarinoŠimić建议的常用Init()方法! 它是C ++风格,不适合C#。在C#初始化应该在构造函数中完成!

详见Bill Wagners的书“Effective C#”:

http://www.diranieh.com/NETCSharp/EffectiveCS.htm#14._Use_Constructor_Chaining