C#でThread.Sleep(1)が明らかに1ミリ秒以上かかっている現象について
以下のコードを実行すると1秒で処理が終わるはずが10秒ほどかかります。
CPU8コアのマシンで、他のプログラムはほとんど負荷がなく余裕がある状態です。
何故でしょうか?
また、意図した通り1ミリ秒だけ待機したいのですがどうしたらいいでしょうか?
(他のスレッドに処理を移すのでピッタリ1ミリ秒といかないのは理解しています。ですがCPUがほとんど使われていない状態で10倍かかるのは困っています)
static void Main(string[] args)
{
int n = 0;
while (true)
{
Thread.Sleep(1);
if (n++ > 1000) break;
}
}
補足になりますが、秒間1000回ある処理を行うというのが目的です。
その処理自体はスレッドで行うのですが、その処理をスレッドに行ってもいいと指令をくだすのがこのメインスレッドです。
補足
回答に提示していただいた下記コードをそのまま実行し、「15000ミリ秒」ほどかかりました。
Thread.Sleep(1);をコメントアウトすると瞬時で終わります。
CPUはほとんど使われていません。
var stopwatch = Stopwatch.StartNew();
int n = 0;
while (true) {
Thread.Sleep(1);
if (n++ > 1000) break;
}
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds);