0

我的问题涉及与以下示例案例相关的性能比较(数值估计),这些案例以 4 种不同的方式在C# 4.0和/或C# 5.0中实现 for-loop:

for (int i=0; i<10000; i++;){string _s="a";}
for (int i=0; i<10000; ++i;){string _s="a";}
for (int i=10000; i>0; i--;){string _s="a";}
for (int i=10000; i>; --i;){string _s="a";}

问题:以下哪个实现将在 C# 4.0 或 C# 5.0 中实现的通用 for 循环中提供更好的性能(执行时间)?

注1:字符串_s="a"; 只是一个示例操作,可能出于测试目的而省略。

注 2:到目前为止,根据关于(C 中 i++ 和 ++i 之间是否存在性能差异?)的讨论,似乎 ++i 比 C++ 中的 I++ 运行得更快。

4

1 回答 1

3

优化器应该知道从不使用预先递增的值i,因此它们应该是相同的(简单地递增i)。

唯一的原因i++ 可能++i编译器必须在递增之前保存旧的、预先递增的值慢i。然而,鉴于寄存器压力较低,这应该与额外的“移动”指令一样微不足道。

如果您真的在乎,我建议您对测试用例进行基准测试。 Stopwatch提供了足够的功能来获得很好的估计。

此外,查看生成的 IL 将告诉您是否有任何差异。

于 2013-05-12T23:37:20.303 回答