【问题标题】:Constructors calling other constructors: any performance issues?构造函数调用其他构造函数:任何性能问题?
【发布时间】:2011-05-06 18:41:26
【问题描述】:

在性能至关重要的应用程序中,场景 1(完全独立的构造函数)与 场景 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

【问题讨论】:

    标签: .net performance constructor method-chaining


    【解决方案1】:

    不,不会有明显差异。

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

    【讨论】:

      【解决方案2】:

      速度应该差别不大。 Thjere 只是从裸构造函数到深层构造函数的另外 2 次调用......但是:

      您应该询问 C# 语言对调用构造函数的构造函数的看法:P 那里不会很顺利,所以我认为你应该坚持使用不同的方法,比如制作“初始化方法”,并从每个构造函数中调用它,并拥有更易读的代码。在那里,您需要使用不太可读的“:this(0)”表示法(例如,阅读时的程序性)。而且它会少一个调用来达到做某事的目的。

      【讨论】:

        【解决方案3】:

        这取决于您所说的引人注目。场景 1 确实引入了额外的调用,但它增加的时间将以毫秒为单位进行测量。场景 2 会更快。 (它也会增加生成代码的大小。)

        【讨论】:

          【解决方案4】:

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

          有关详细信息,请参阅 Bill Wagners 的书《Effective C#》:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-10-17
            • 2018-02-13
            • 2012-12-25
            • 1970-01-01
            • 2017-04-01
            • 1970-01-01
            • 2015-07-20
            相关资源
            最近更新 更多