4

非常に具体的なパフォーマンス テストについて回答する必要がある、非常に具体的な質問があります。わかりやすくするために、コードを単純化します。

私は多くの計算 (数千万) を行いますが、それ自体はそれほど長くないループですべて実行され、合計計算時間が必要です。ただし、すべての計算が次々に直接実行されるわけではなく、ループごとに余分なコードが「間に入ります」。

私が必要としているのは、すべてのループの正確な合計時間です (i の宣言と初期化、インクリメント、例の 100 との比較を含む)。時間を測定するために、Stopwatchすべてのループの直前に開始し、ループの直後に停止します。しかし、これら 2 つのアクションには、関連する可能性のある時間が必要ですか?

例:

Stopwatch sw = new Stopwatch();

sw.Start();
//how long does it now take until for loop is reached?
for(int i = 0; i < 100; i++)
{
    //some calculations
}
//how much time does it take to stop sw?
sw.Stop();

もちろん、すべてのループが次々に直接実行されても問題はありません。最初のループの最初から開始し、最後のループの最後で停止することもできますが、ここではそれができません。

質問が非常に具体的であることは承知していますが、約 5,000 万回のループからのかなりの時間が私の結果に何らかの影響を与える可能性があるため、誰かがここで私を助けてくれることを願っています.

4

2 に答える 2

4

私が必要としているのは、まさにすべてのループの合計時間です。時間を測定するために、すべてのループの直前にStopWatchを開始し、ループの直後に停止します。しかし、これらの2つのアクションには、関連する可能性のある時間が必要ですか?

i、の初期化、インクリメント、および各ループ反復での100との比較と同様に、これらには時間がかかります。コンピューティングではほとんど何も瞬間的ではありません。

それが適切かどうかは別の問題です。あなたの計算が全く些細なものでない限り、これがあなたのタイミングで重要になることはありそうにありません。空のループのタイミングを試すこともできますが、JITコンパイラがループ自体を完全に取り除く可能性があります。

于 2012-11-18T18:45:08.823 に答える
2

まあ、これを試して自分で確認することもできます.私の(パフォーマンスの悪い)コンピュータでは、最初の実行で約0.0006ミリ秒、次の実行で約0.0001ミリ秒です. 自分で試してみてください:

Stopwatch sw = new Stopwatch();
sw.Start();
sw.Stop();
TimeSpan ts = TimeSpan.FromTicks(sw.ElapsedTicks);
string elapsed = ts.TotalMilliseconds.ToString();
于 2012-11-18T18:50:44.967 に答える