在这样的样本中,这并不重要。JIT 不插入简单的可能性get
非常低。即使get
没有内联,额外的函数调用也不会成为非常简单的代码之外的性能瓶颈。
为了说明我的意思,我在发布模式下运行了以下命令(如果你让它调试它会以不同的方式工作)。
private int Length { get; set; }
private int _length;
void Run()
{
Length = int.MaxValue;
_length = int.MaxValue;
var watch = new Stopwatch();
watch.Start();
for (int i = 0; i < Length; i++)
{
}
watch.Stop();
Console.WriteLine("Elapsed: {0}ms", watch.ElapsedMilliseconds);
watch.Restart();
for (int i = 0; i < _length; i++)
{
}
watch.Stop();
Console.WriteLine("Elapsed: {0}ms", watch.ElapsedMilliseconds);
}
我运行了 10 次,得到以下平均值:Property 为 743 ms,Variable 为 740 ms。这种差异可能只是因为我的机器上发生的尝试次数和其他事情很少。
现在,如果您通过属性关闭内联,您将获得时间差异:属性为 4577 毫秒,变量为 775 毫秒。现在这听起来差别很大(总时间的 6 倍),但请记住我的循环条件:20 亿次迭代。这意味着每次操作的差异大约为 2 ns。换句话说,大约 4 个时钟周期,除了最极端的性能场景外,还不足以担心。