C++ | Поради
вступ
У C++ вимірювання часу виконання функцій є важливою частиною відлагодження та оптимізації продуктивності коду. У цьому посібнику ми розглянемо, як створити клас Timer для вимірювання тривалості викликів функцій у мілісекундах.
Опис класу Timer
Клас Timer
використовує бібліотеку std::chrono
, яка надає високоточні годинники для точних вимірів часу. Основні компоненти:
#include
#include
#include
struct Timer {
std::chrono::time_point start, end;
std::chrono::duration duration;
Timer() {
start = std::chrono::high_resolution_clock::now();
}
~Timer() {
end = std::chrono::high_resolution_clock::now();
duration = end - start;
float ms = duration.count() * 1000.0f;
std::cout << "Час виконання: " << ms << "ms" << std::endl;
}
};
Як це працює:
- Конструктор
Timer
ініціалізує початковий час за допомогоюstd::chrono::high_resolution_clock::now()
. - Деструктор обчислює витрачений час, коли об'єкт виходить із області видимості.
- Тривалість виводиться в мілісекундах.
Вимірювання часу виконання функції
Ви можете виміряти час виконання будь-якої функції, створивши об'єкт Timer
на початку функції:
void Sleep() {
Timer timer;
using namespace std::literals::chrono_literals;
std::this_thread::sleep_for(1s);
}
void Count() {
Timer timer;
for (int i = 0; i < 10; ++i)
std::cout << "Число: " << i << std::endl;
}
int main() {
Sleep();
Count();
return 0;
}
Пояснення:
- Функція
Sleep
вимірює час, який витрачається на паузу програми на одну секунду. - Функція
Count
вимірює час, витрачений на виведення чисел від 0 до 9.
Чому використовувати клас Timer?
- Відлагодження: Допомагає виявляти проблеми з продуктивністю.
- Оптимізація: Корисний при порівнянні різних реалізацій однієї й тієї ж логіки.
- Простота: Клас Timer автоматично обчислює час без необхідності вручну писати код.
YouTube відео
Висновок
Використання класу Timer — це простий і ефективний спосіб виміряти час виконання функцій у C++. Він може бути особливо корисним під час відлагодження та оптимізації продуктивності.
Перекладено з: Measuring Function Execution Time in C++ with a Timer Class