Как замерить время?
От: NewBayes Украина  
Дата: 26.03.07 06:25
Оценка:
Программа состоит из нескольких модулей. Как на С++ определить время выполнения каждого модуля отдельно?
Re: Как замерить время?
От: bnk СССР http://unmanagedvisio.com/
Дата: 26.03.07 07:46
Оценка:
Здравствуйте, NewBayes, Вы писали:

NB>Программа состоит из нескольких модулей. Как на С++ определить время выполнения каждого модуля отдельно?


Профайлером?
Re: Как замерить время?
От: SL555 Россия  
Дата: 26.03.07 09:54
Оценка:
Здравствуйте, 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
Re[2]: Как замерить время?
От: red_dragon Украина  
Дата: 26.03.07 09:55
Оценка:
Здравствуйте, SL555, Вы писали:

SL>Если не охота возиться с профилировшиком, Пишите класс в конструкторе которого засакаете начало интервала, в деструкторе конец, что то типа:


Профайлером проще
Re[3]: Как замерить время?
От: SL555 Россия  
Дата: 26.03.07 10:03
Оценка:
Здравствуйте, red_dragon, Вы писали:

_>Здравствуйте, SL555, Вы писали:


SL>>Если не охота возиться с профилировшиком, Пишите класс в конструкторе которого засакаете начало интервала, в деструкторе конец, что то типа:


_>Профайлером проще


Я полность с этим согласен, и нужно мерить, профайлером он много еще чего полезного покажет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.