2

次の間に(パフォーマンスの観点から)違いはありますか:

Thread.Sleep(10000);

for(int i=0; i<100; i++)
{
   Thread.Sleep(100);
}

への 1 回の呼び出しでThread.Sleep(10000)も、この 10 秒以内にコンテキスト スイッチが発生するのでしょうか (OS は、スリープが終了したかどうかを確認できます)、またはこのスレッドは実際には 10 秒間処理されませんか?

4

2 に答える 2

2

2 番目のコード (for ループ) は、より多くのプロセス スワップを必要とし、Thread.Sleep(10000);

とにかく、System.Diagnostics.Stopwatchクラスを使用して、これら 2 つのアプローチの正確な時間を決定できます。その差は非常に小さいと思います。

于 2013-07-02T07:15:19.200 に答える
1

いずれにせよ、次のオーバーヘッドのため、2 番目のループには時間がかかります

  1. 10 個の異なるスレッド オブジェクトのメモリ使用率
  2. thread.sleep を呼び出すと、10 の異なるコールバックが開始されます。
  3. ループを実行するためのオーバーヘッド コスト
  4. シングルスレッドでコードを実行したい場合、ブレークポイントさえないのに、なぜループが必要なのですか。
于 2013-07-02T07:23:00.910 に答える