Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Парадокс с измерением времени


Автор: 4ybaka 19.10.2008, 19:52
Замеряю работы дискретного и быстрого преобразования Фурье. Замеряю при помощи QueryPerformanceCounter и DateTime.Now.
выполняю такой вот код:
Код

                DateTime start = DateTime.Now;
                counter.Start();
                Complex[] y = MathLib.FT(x);
                counter.Stop();
                DateTime end = DateTime.Now;

аналогично для БПФ. после подсчета времени оказывается что по QueryPerformanceCounter (обертка через counter) ДПФ выполняется ровно на 1 сек дольше(1.34 против 0.34), а для БПФ ровно (0.015)
Кто может объяснить такой парадокс?на мсдн вычитал что QueryPerformanceCounter вроде плохо ладит с многопроцессорными системами. так ли это? и почему тогда БПФ нормально считает?пробовал до начала подсчета запускать QueryPerformanceCounter  и сбрасывать.не помогло.

Автор: gambit 19.10.2008, 20:50
Цитата(4ybaka @  19.10.2008,  19:52 Найти цитируемый пост)
QueryPerformanceCounter вроде плохо ладит с многопроцессорными системами. так ли это?

Да это так, потому что процессор может перекидывать процесс между ядрами, а некоторые отличившиеся особи еще и изменять частоту.
Кроме того QueryPerformanceCounter это еще и api функция, т.е. неуправляемая.

измеряй либо через DateTime.Now, либо через DateTime.Now.Ticks, еще есть класс StopWatch который по заявлению Microsoft заменяет QueryPerformanceCounter.

Автор: 4ybaka 19.10.2008, 22:25
Разобрался. Они там в Редмонде умеет мозги пудрить smile Использовал Milliseconds вместо TotalMilliseconds. А первая есть ни что иное, как TotalMilliseconds % 1000. Что собственно и приводило к потере секунды.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)