我正在创建一个性能至关重要的类。我正在进行更改和基准测试,以便观察它们的影响。
该类的结构如下:
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;
}
}
重新运行测试后,我发现这实际上会通过显着(相对于测试)量来降低性能。我的问题是:导致这种情况发生的原因是什么,我能做些什么来减轻它?