С++ Оценка времени выполнения кода

Оценка времени выполнения кода

Весьма полезно иметь возможность оценить время выполнения какого-то фрагмента кода или потока чтобы выполнить оптимизацию.
Для этого необходима библиотека
#include «chrono»
или #include «thread», которая уже включает библиотеку chrono.

Суть измерения – запоминаем «системное» время в начале кода и по его окончанию и высчитываем разницу.
За работу со временем отвечает библиотека chrono.

int main()
{
    auto Start=chrono::high_resolution_clock::now(); //старт подсчета времени
    for(int i=0;i<10;++i)
    {
        Sleep(100); //задержка 100мс
    }
    auto Stop=chrono::high_resolution_clock::now();  //стоп подсчета времени
    chrono::duration Delta=Stop-Start; //высчитываем разницу
    cout<<"Time code = "<<Delta.count()<<endl; //выводим разницу
    return 0;
}

Значение Delta будет немного больше 1с т.к. на вход/выход из цикла и тд тратится время.
Удобно такой подсчет оформить в виде класса:

#define TimeDebug
class TimeCodeCnt
{
public:
    TimeCodeCnt()
    {
#ifdef TimeDebug
        Time_Start=std::chrono::high_resolution_clock::now();
#endif
    }

    void EndCnt()
    {
#ifdef TimeDebug
        Time_Stop=std::chrono::high_resolution_clock::now();
        std::chrono::duration Delta=Time_Stop-Time_Start; //высчитываем разницу
        cout<<"Time code = "<<Delta.count()<<"s"<<endl; //выводим разницу
#endif
    }

private:
    std::chrono::time_point Time_Start, Time_Stop;
};

Примечание: тип переменной std::chrono::time_point<std::chrono::_V2::system_clock>
взят для windows и QtCreator – в вашей ос и IDE (или другой версии IDE м.б. иной тип переменной)

Пример использования класса:

int main()
{
    cout<<"Start code"<<endl;

    TimeCodeCnt TimeCode;
    for(int i=0;i<10;++i)
    {
        Sleep(100); //задержка 100мс
    }
    TimeCode.EndCnt();

    cout<<"End code"<<endl;
    return 0;
}

Если оценка времени не нужна — комментируем #define TimeDebug

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *