Если задача не рассчитана процессором, время в работе секундомера будет потрачено впустую.
Если вы посмотрите на исходный код System.Diagnostics.Stopwatch
, вы увидите, что он на самом деле не работает, нет потерь. У него есть две отметки времени start
и end
, и он фактически подсчитывает elapsed
, вычисляя и добавляя периоды между ними. Обратите внимание, что вы можете запускать и останавливать Stopwatch
несколько раз, он будет измерять суммарный период между этими прогонами. Таким образом, ответ будет да , он также вычислит время, когда поток неактивен.
Также от Microsoft вы должны быть осторожны при запуске Stopwatch
в многопроцессорной среде:
На многопроцессорном компьютере не имеет значения, на каком процессоре работает поток. Однако из-за ошибок в BIOS или на уровне аппаратных абстракций (HAL) вы можете получить разные результаты синхронизации на разных процессорах. Чтобы указать привязку процессора к потоку, используйте метод ProcessThread.ProcessorAffinity
.
С другой стороны, если вы хотите измерить, сколько времени ЦП потратил на выполнение кода, взгляните на следующую ссылку: ExecutionStopwatch . Он в основном использует использование GetThreadTimes
и измеряет, сколько времени потратил поток, работая вместе в режиме ядра или пользователя.