Почему продолжительность секундомера значительно больше, чем отладчик Visual Studio? - PullRequest
1 голос
/ 22 февраля 2020

Я сравниваю время выполнения разных клиентов Redis. Я следую совету нескольких ответов о переполнении стека, например, one (что касается использования секундомера для простого таймера). Обратите внимание на мои результаты на изображении ниже. Время выполнения Visual Studio составляет 926 мс, но значение таймера равно 16 815 мс. Результаты секундомера постоянно выше (довольно много). Что я делаю не так?

enter image description here

1 Ответ

0 голосов
/ 22 февраля 2020

Stopwatch измеряет прошедшее время между Start и Stop путем подсчета тактов в базовом механизме таймера. Сказав это означает, что если вы используете F10 для перехода по операторам, то также Stopwatch работает в фоновом режиме.

Давайте проведем тест, чтобы сравнить оба времени с тестом ниже, чтобы лучше понять. Предположим, что breakpoint находится на 1-й строке и в последний раз. Нажмите F5, когда выполнение приостановлено на 1-й точке останова, и сравните время, показанное отладчиком и секундомером. Те были бы сопоставимы.

Stopwatch stopwatch = Stopwatch.StartNew();   //Breakpoint 

Print();  //Have a Thread.Sleep(1000);
stopwatch.Stop();

int count = 10;                              //Breakpoint

В моем случае Stopwatch показал истекшее время как 1002ms, а отладчик показал <1005ms.

[Time in debugger[1]

Обратите внимание, что время будет значительно отличаются, если вы переступаете через каждую строку (по одной за раз). Секундомер покажет значительно большее время, поскольку прошедшее время будет больше.

...