Почему вызов Thread.Sleep в цикле занимает 6 секунд вместо 5? [дубликат]C#

Место общения программистов C#
Ответить
Anonymous
 Почему вызов Thread.Sleep в цикле занимает 6 секунд вместо 5? [дубликат]

Сообщение Anonymous »

Я реализовал этот простой цикл на C#, который выполняется 100 раз и на каждой итерации ожидает 50 мс.

Код: Выделить всё

using System.Diagnostics;

var sw = Stopwatch.StartNew();

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

sw.Stop();

Console.WriteLine("Elapsed: {0}", sw.Elapsed);
Я ожидал, что этот цикл займет около 5 секунд, плюс немного дополнительного времени для выполнения цикла сто раз.
К моему удивлению, это заняло более 6 секунд, вот результат.

Код: Выделить всё

$ dotnet run -c Release
Elapsed: 00:00:06.2177943
Может кто-нибудь сказать, в чем причина этого? Является ли это дополнительными затратами, связанными с тем, что ОС приходится планировать поток каждый раз, когда ей нужно выйти из спящего режима? Или поскольку не гарантируется, что спящий режим будет ровно 50 мс, он может спать немного дольше на каждой итерации, и это суммируется? Стоит ли ожидать такого уровня неточности?
(Это касается .NET 10 в Windows 11.)

Подробнее здесь: https://stackoverflow.com/questions/798 ... stead-of-5
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»