从类中删除未使用的属性和构造函数会降低性能?

时间:2015-10-30 13:04:38

标签: c# benchmarking

我正在创建一个性能至关重要的类。我正在进行更改和基准测试,以便观察它们的影响。

该类的结构如下:

class Example
{
    public int Property1 { get; private set; }
    public int Property2 { get; private set; }

    public Example()
        : this(0, 1, null)
    {
    }

    public Example(int param1, int param2)
        : this(param1, param2, null)
    {
    }

    public Example(int param1, int param2, Random param3)
    {
    }

    // Some other private fields...

    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    public int DoWork()
    {
        // Do work...
        return 123;
    }
}

测试结构如下:

        Example e = new Example(123, 456, new Random());
        Stopwatch sw = new Stopwatch();
        sw.Start();
        ulong n = 10000000000;
        for (ulong i = 1; i <= n; i++)
        {
            e.DoWork();
        }
        sw.Stop();
        Console.WriteLine(sw.Elapsed);

在测试期间,我发现&#39; Property1&#39;,&#39; Property2&#39;并且在测试开始时调用的所有构造函数栏都不是必需的 - 在测试期间,这些都没有被调用或引用。在测试开始时调用的构造函数在测试期间只调用一次。

所以我将类声明更新为:

class Example
{
    //public int Property1 { get; private set; }
    //public int Property2 { get; private set; }

    //public Example()
    //    : this(0, 1, null)
    //{
    //}

    //public Example(int param1, int param2)
    //    : this(param1, param2, null)
    //{
    //}

    // Some other private fields... (not removed).

    public Example(int param1, int param2, Random param3)
    {
    }

    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    public int DoWork()
    {
        // Do work...
        return 123;
    }
}

重新运行测试后,我发现这实际上会通过显着(相对于测试)量来降低性能。我的问题是:导致这种情况发生的原因是什么,我能做些什么来减轻它?

0 个答案:

没有答案