0

私の質問は、4 つの異なる方法でC# 4.0および/またはC# 5.0でfor ループを実装する次のサンプル ケースに関連するパフォーマンス比較 (数値推定) に関するものです。

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 : string _s="a"; は単なるサンプル操作であり、テスト目的で省略される可能性があります。

注 2 : これまでのところ、( Is there a performance difference between i++ and ++i in C? )に関する議論によると、++i は C ++ の I++ よりも高速に実行されるようです。

4

1 に答える 1

3

オプティマイザは、事前にインクリメントされた の値がi使用されないことを認識している必要があるため、同じにする必要があります (単にインクリメントするだけですi)。

唯一の理由は、コンパイラがインクリメントする前に古い、事前にインクリメントされた値を保存する必要がある場合よりも遅くなるi++ 可能性があります。ただし、レジスタの圧力が低い場合、これは「移動」命令を 1 つ追加するのと同じくらい簡単なはずです。++ii

本当に気にするなら、テストケースのベンチマークを行うことをお勧めします 。Stopwatchかなり良い見積もりを得るのに十分な機能を提供します。

また、生成された IL を見ると、違いがあるかどうかがわかります。

于 2013-05-12T23:37:20.303 に答える