gpt4 book ai didi

c# - += 如何比普通表达式更优化

转载 作者:太空宇宙 更新时间:2023-11-03 18:30:22 24 4
gpt4 key购买 nike

我在某处读到:

良好实践: exp += val错误做法: exp = exp + val

第二个选项强制 JIT 计算 exp 的两个副本,很多时候不需要这样做。第一条语句可以比第二条语句优化得更好,因为 JIT 可以避免对 exp 求值两次。

所以我写了一个示例测试来验证这一点。但我得到的结果是我可以得出结论。任何人都可以帮助我了解上述做法是好是坏,或者我的示例中有任何错误。

        static void Main(string[] args)
{
DateTime startTime;
DateTime endTime;

for (int run = 0; run < 10; run++)
{
Console.WriteLine("--- Run #" + run.ToString());
long sumB = 0;
startTime = DateTime.Now;
for (long i = 0; i < 1000000000; i++)
{
sumB = sumB + 2L;
}
endTime = DateTime.Now;
Console.WriteLine(endTime - startTime);

long sumA = 0;
startTime = DateTime.Now;
for (long j = 0; j < 1000000000; j++)
{
sumA += 2L;
}
endTime = DateTime.Now;
Console.WriteLine(endTime - startTime);
}

Console.WriteLine("*");
Console.ReadKey();
}

最佳答案

至少在 C++ 中(我不懂 C#),a += b 只会计算一次 a,而 a = a + b 将对其求值两次。

如果它是一个复杂的表达式,那么这可能会对性能产生影响。如果在您的示例中,它是一个简单的变量(或者更一般地说,编译器可以证明没有副作用的表达式),那么应该对两者进行优化以生成相同的代码,因此可能没有显着差异。

更好的建议是支持 a += b,因为它避免冗余,有助于提高可读性并减少错误范围,而不是使用(通常是虚假的或不相关的)关于性能的参数。

关于c# - += 如何比普通表达式更优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23362873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com