Программа состоит из нескольких модулей. Как на С++ определить время выполнения каждого модуля отдельно?
Здравствуйте, NewBayes, Вы писали:
NB>Программа состоит из нескольких модулей. Как на С++ определить время выполнения каждого модуля отдельно?
Если не охота возиться с профилировшиком, Пишите класс в конструкторе которого засакаете начало интервала, в деструкторе конец, что то типа:
class CReal_Time{
private:
__int64 ctr1;
__int64 ctr2;
__int64 freq ;
DWORD m_dMemoryBegin;
DWORD m_dMemoryEnd;
wchar_t buf[500];
std::wstring Funk_Name;
HANDLE hProcess;
PROCESS_MEMORY_COUNTERS pmc;
public:
CReal_Time(wchar_t* funk_name):ctr2(0),m_dMemoryEnd(0){
QueryPerformanceCounter((LARGE_INTEGER *)&ctr1);
QueryPerformanceFrequency((LARGE_INTEGER *)&freq);
Funk_Name.append(funk_name);
hProcess=OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, GetCurrentProcessId() );
if (NULL != hProcess){
if ( GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)) )
{
m_dMemoryBegin=pmc.WorkingSetSize ;
}
}
memset(buf,0,sizeof(buf));
}
~CReal_Time(){
QueryPerformanceCounter((LARGE_INTEGER *)&ctr2);
if (NULL != hProcess){
if ( GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)) )
{
m_dMemoryEnd=pmc.WorkingSetSize ;
}
}
swprintf(buf,L" %s Time %f second Memory Begin %d, Memory End %d ",Funk_Name.c_str(),(ctr2 - ctr1) * 1.0 / freq,m_dMemoryBegin,m_dMemoryEnd);
LOGINFO<<buf; //Добавление в лог
}
};
Примерный результат что то типа:
Navigate Time 0.000047 second Memory Begin 12189696, Memory End 12189696
Здравствуйте, SL555, Вы писали:
SL>Если не охота возиться с профилировшиком, Пишите класс в конструкторе которого засакаете начало интервала, в деструкторе конец, что то типа:
Профайлером проще
Здравствуйте, red_dragon, Вы писали:
_>Здравствуйте, SL555, Вы писали:
SL>>Если не охота возиться с профилировшиком, Пишите класс в конструкторе которого засакаете начало интервала, в деструкторе конец, что то типа:
_>Профайлером проще
Я полность с этим согласен, и нужно мерить, профайлером он много еще чего полезного покажет