質問: 0; while (true) { Thread.Sleep(1); if (n++ > 1000) break; } stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); ```
回答: どうも以下のどちらかの条件でレイテンシが16ms程度に悪化するように思われます。 * ReleaseビルドのアセンブリをVisual Studio外から起動する * Visual Studioホスティングプロセスを有効にしたうえでReleaseビルドのデバッグを行い、しばらく`Thread.Sleep(1)`を実行し続ける (なおVsHub.exeを強制終了すると元に戻ります) *※実行環境はWindows 10/x64/Visual Studio 2015/32bit優先* `Release`で発生することから最適化による差異と思われますが、そもそも`Thread.Sleep(int)`の精度は全く保証されておりませんので * `Thread.Sleep(1)`の間隔が変化することを見越したプログラムを書く * `Thread.Sleep(0)`に変更する(これもレイテンシが変化します) * コンテキストスイッチを行わずに1ms待機する // Thread.Sleep(1)の代わりにwhileで時間を潰す while (stopwatch.ElapsedMilliseconds < n + 1){} というような方針を取った方が良いかと思います。