Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.16;
Скачать: CL | DM;

Вниз

Скорость алгоритма.   Найти похожие ветки 

 
Б   (2009-06-19 12:10) [0]

Как максимально точно скорость алгоритма? (Графики и т.п.)
До этого пользовался GetTickCount, но он выдаёт приближённый результат.


 
Б   (2009-06-19 12:11) [1]

* Как максимально точно определить скорость алгоритма.


 
Palladin ©   (2009-06-19 12:15) [2]

unit UWRTickers;
interface
Type
TTicker=Class
 Private
  m_nFreq,
  m_nStartValue,
  m_nLastTickValue,
  m_nLastTickCount,
  m_nNowTickValue,
  m_nTickCount:Int64;
  Function lcGetLastTickTime:Extended;
  Function lcGetAllTime:Extended;
  Function lcGetAvgTickTime:Extended;
 Public
  Constructor Create;
  Procedure Reset; Virtual;
  Procedure Tick(p_nCount:Integer=1); Virtual;
  Property LastTickTime:Extended Read lcGetLastTickTime;
  Property AllTime:Extended Read lcGetAllTime;
  Property AvgTickTime:Extended Read lcGetAvgTickTime;
End;

TWindowsTicker=Class(TTicker)
 Public
  Procedure Reset; Override;
  Procedure Tick(p_nCount:Integer=1); Override;
End;

TPerfomanceCounterTicker=Class(TTicker)
 Public
  Procedure Reset; Override;
  Procedure Tick(p_nCount:Integer=1); Override;
End;

Function CreateBestTicker:TTicker;

implementation
Uses
Windows;

Procedure TTicker.Tick;
Begin
 m_nLastTickValue:=m_nNowTickValue;
 m_nLastTickCount:=m_nTickCount;
 m_nTickCount:=m_nTickCount+p_nCount;
End;

Constructor TTicker.Create;
Begin
 Reset;
End;

Procedure TTicker.Reset;
Begin
 m_nLastTickValue:=m_nStartValue;
 m_nNowTickValue:=m_nStartValue;
 m_nLastTickCount:=0;
 m_nNowTickValue:=0;
 m_nTickCount:=0;
End;

Function TTicker.lcGetLastTickTime;
Begin
 If m_nFreq=0 Then Result:=0 Else
  If m_nLastTickCount=0 Then Result:=0 Else Result:=(m_nNowTickValue-m_nLastTickValue)/m_nFreq/m_nLastTickCount;
End;

Function TTicker.lcGetAllTime;
Begin
 If m_nFreq=0 Then Result:=0
              Else Result:=(m_nNowTickValue-m_nStartValue)/m_nFreq;
End;

Function TTicker.lcGetAvgTickTime;
Begin
 If m_nFreq=0 Then Result:=0 Else
 If m_nTickCount=0 Then Result:=0 Else Result:=(m_nNowTickValue-m_nLastTickValue)/m_nFreq/m_nTickCount;
End;

Procedure TWindowsTicker.Reset;
Begin
 m_nFreq:=1000;
 m_nStartValue:=GetTickCount;
 Inherited;
End;

Procedure TWindowsTicker.Tick;
Begin
 Inherited;
 m_nNowTickValue:=GetTickCount;
End;

Procedure TPerfomanceCounterTicker.Reset;
Begin
 QueryPerformanceFrequency(m_nFreq);
 QueryPerformanceCounter(m_nStartValue);
 Inherited;
End;

Procedure TPerfomanceCounterTicker.Tick;
Begin
 Inherited;
 QueryPerformanceCounter(m_nNowTickValue);
End;

Function CreateBestTicker:TTicker;
Var
n:Int64;
Begin
If Not QueryPerformanceFrequency(n) Then Result:=TWindowsTicker.Create
                                    Else Result:=TPerfomanceCounterTicker.Create;
End;

end.


 
Palladin ©   (2009-06-19 12:17) [3]

Удалено модератором
Примечание: дубль


 
Ega23 ©   (2009-06-19 12:20) [4]


> До этого пользовался GetTickCount, но он выдаёт приближённый
> результат.


Через SystemTime можно попробовать, там, судя по декларации, дискрет - 100 наносекунд.


 
Loginov Dmitry ©   (2009-06-19 12:21) [5]


> До этого пользовался GetTickCount, но он выдаёт приближённый
> результат.


А что если прогнать данный участок N раз вподряд, запомнить общее время, затем разделить его на N. Получится относительно адекватный результат.


 
AndreyV ©   (2009-06-19 18:12) [6]

Я чёт не пойму. Как можно получить результат измерения точнее, чем позволяет измерительный инструмент. только инструмент менять. При использовании инструмента любой точноти расчитывать среднее и отклонение из статистики многих замеров.



Страницы: 1 вся ветка

Текущий архив: 2009.08.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
1-1212066362
mops
2008-05-29 17:06
2009.08.16
combobox и comboxbox


2-1245310635
wordmen
2009-06-18 11:37
2009.08.16
Как удалить символы перевода строки в Memo


15-1245232625
@!!ex
2009-06-17 13:57
2009.08.16
Средства улучшения работы в Visual Studio


15-1245067891
Пит
2009-06-15 16:11
2009.08.16
HTML, разворачивание элемента


2-1245237512
TheEd
2009-06-17 15:18
2009.08.16
Как принудительно "убить" InplaseEditor в StringGride