C # - расчет времени не работает с TimeSpan.FromTicks DateTime - PullRequest
0 голосов
/ 25 августа 2011

Я пытаюсь рассчитать частоту кадров видео в программе. Для этого я беру

DateTime.Now

в начале потока, а затем снова после каждого кадра, одновременно увеличивая счетчик кадров.

Тогда я вычисляю FPS следующим образом:

int fps = (int)(frames / (TimeSpan.FromTicks(CurrentTime.Ticks).Seconds - TimeSpan.FromTicks(StartTime.Ticks).Seconds));

Проблема в том, что я иногда получаю отрицательное число, означающее, что время начала должно быть позже, чем текущее время. Как это может быть так? Кто-нибудь знает достаточно об этих функциях, чтобы объяснить?

Ответы [ 3 ]

6 голосов
/ 25 августа 2011

Секунды - это секундная часть TimeSpan, а не общая продолжительность TimeSpan, преобразованная в секундах.Это означает, что количество секунд не будет больше 60.

Используйте вместо TotalSeconds

5 голосов
/ 25 августа 2011

Вы должны рассмотреть возможность использования StopWatch для таких нужд, он имеет гораздо лучшую точность

3 голосов
/ 25 августа 2011

Функции datetime, возможно, недостаточно точны для ваших нужд, вместо этого вы можете посмотреть счетчики производительности. Я думаю, что класс StopWatch - это то, что вы ищете. System.Diagnostics.StopWatch. для синхронизации используются функции QueryPerformanceFrequency и QueryPerformanceCounter.

...