Найдите время выполнения программы на C
В этом посте будет обсуждаться, как найти время выполнения программы C в средах Windows и Linux.
Существует четыре широко используемых метода определения времени выполнения программы на C:
1. Использование clock() функция
Мы можем использовать clock() функция, предоставляемая <time.h> заголовочный файл для расчета времени ЦП, потребляемого задачей в приложении C. Он возвращает clock_t type, в котором хранится общее количество тактов часов.
Чтобы вычислить общее количество прошедших секунд, нам нужно разделить общее количество прошедших тактов часов на CLOCKS_PER_SEC макрос (также присутствует в <time.h> ) как показано ниже:
Выход (может варьироваться):
The elapsed time is 0.000014 seconds
Обратите внимание, что clock() Функция не возвращает фактическое количество прошедшего времени, а возвращает количество времени, которое потребовалось базовой операционной системе для запуска процесса. Другими словами, фактическое время настенных часов может быть намного больше.
Как измерить время выполнения операции в C#
При разработке различных программ иногда бывает необходимо измерить точное время какой-либо операции, например, узнать сколько времени требуется на загрузку данных из файла, запись в базу данных и так далее. Сегодня мы рассмотрим то, как измерить время выполнения операции в C#, используя стандартные средства и возможности языка.
System. Diagnostics
Пространство имен System.Diagnostics содержит классы, позволяющие нашим приложениям взаимодействовать с журналами событий, системными процессами и счётчиками производительности. В числе прочего, это пространство имен содержит класс под названием Stopwatch , который можно в своих приложениях C# использовать для точного измерения затраченного времени. Именно об этом классе мы сегодня и поговорим.
Простой пример использования Stopwatch
Для начала, рассмотрим простой пример использования класса Stopwatch для измерения затраченного времени на выполнение операции.
Чтобы измерить время выполнения операции в C# нам необходимо выполнить несколько простых шагов:
- Создать объект класса Stopwatch ;
- Выполнить метод Start() для того, чтобы засечь время начала операции;
- Выполнить метод Stop() для того, чтобы засечь время окончания операции;
- Воспользоваться одним из свойств объекта для получения данных о затраченном на выполнение операции времени.
В примере использовано свойство ElapsedMilliseconds , которое позволяет получить количество миллисекунд, затраченных на выполнение операции. Рассмотрим какие ещё есть свойства и методы у класса Stopwatch .
Stopwatch
Свойства Stopwatch
Elapsed
Свойство Elapsed позволяет получить общее затраченное время, измеренное текущим экземпляром класса Stopwatch . Описание свойства выглядит следующим образом:
Свойство возвращает объект типа TimeSpan — интервал времени, используя который, можно получить время выполнения операции в удобном для вас виде. Например,
ElapsedMilliseconds
Свойство ElapsedMilliseconds позволяет получить общее затраченное время, измеренное текущим экземпляром класса Stopwatch в миллисекундах. В примере использования класса Stopwatch выше продемонстрировано использование этого свойства.
Elapsed Ticks
Свойство Elapsed Ticks позволяет получить общее время выполнение операции в тактах таймера, измеренное текущим экземпляром Stopwatch . Такт — это наименьшая единица времени, которую Stopwatch может измерять таймер. В следующем примере показано использование свойства Elapsed Ticks для измерения времени, затраченного на преобразование строки в целое число типа int .
Результатом выполнения этого кода может быть вот такой вывод консоли:
Is Running
Свойство IsRunning позволяет получить значение типа bool , указывающее на то запущен ли в данный момент таймер Stopwatch .
Поля Stopwatch
Класс Stopwatch содержит два статических поля, позволяющих получить сведения о настройках таймера.
Frequency
Поле Frequency содержит частоту таймера в виде количества тактов в секунду.
Это поле удобно использовать вместе со свойством Elapsed Ticks для преобразования количества тактов в секунды. Например,
Обращу внимание только на то, как происходит перевод тактов в секунды. Учитывая особенности деления целых чисел в C#, для того, чтобы получить конкретное значение секунд нам потребовалось привести одно из значений (в данном случае значение свойства ElapsedTicks ) к типу double .
Is High Resolution
Свойство Is High Resolution указывает, зависит ли таймер Stopwatch от счетчика производительности высокого разрешения ( true ) или же использует класс DateTime ( false ).
Пример использования поля
Вывод консоли будет иметь следующий вид:
Частота таймера = 10000000
Таймер работает с точностью до 100 наносекунд
Методы Stopwatch
Рассмотрим основные методы класса Stopwatch , которые мы можем использовать для измерения точного времени выполнения операции в C#.
Start и Stop
Метод Start() запускает или возобновляет работу таймера Stopwatch . В свою очередь, Stop() выполняет противоположную операцию — останавливает работу таймера. Использование этих методов продемонстрировано в самом первом примере из этой статьи.
Start New
Метод Start New() выполняет сразу несколько операций — он инициализирует новый экземпляр класса Stopwatch , обнуляет счётчик затраченного времени и запускает таймер. То есть, этот метод позволяет немного сократить исходный код программы. Например, код из первого примера можно было бы записать вот так:
Reset
Метод Reset() останавливает измерение интервала времени и обнуляет счётчик затраченного времени. Использование Reset() позволяет избежать создания новых экземпляров Stopwatch для измерения времени, затраченного на выполнение нескольких операций в C#.
Restart
Метод Restart() останавливает измерение интервала времени, обнуляет затраченное время и повторно запускает таймер. Таким образом, предыдущий пример можно переписать следующим образом:
Итого
Класс Stopwatch из пространства имен System. Diagnostics C# позволяет измерить время выполнения операции с точностью до 100 наносекунд в зависимости от того, что используется для работы с интервалами времени — таймер высокого разрешения или же класс DateTime .
calculating execution time in c++
I have written a c++ program , I want to know how to calculate the time taken for execution so I won’t exceed the time limit.
this is my program and i want it to be within time limit 3 sec !! how to do it ? yeah sorry i meant execution time !!
9 Answers 9
If you have cygwin installed, from it’s bash shell, run your executable, say MyProgram , using the time utility, like so:
This will report how long the execution of your program took — the output would look something like the following:
You could also manually modify your C program to instrument it using the clock() library function, like so:
With C++11 for measuring the execution time of a piece of code, we can use the now() function:
If you want to print the time difference between start and end in the above code, you could use:
If you prefer to use nanoseconds, you will use:
The value of the diff variable can be also truncated to an integer value, for example, if you want the result expressed as:
For more info click here
OVERVIEW
I have written a simple semantic hack for this using @AshutoshMehra response. You code looks really readable this way!
MACRO
USAGE
OUTPUT
Note: the question was originally about compilation time, but later it turned out that the OP really meant execution time. But maybe this answer will still be useful for someone.
For Visual Studio: go to Tools / Options / Projects and Solutions / VC++ Project Settings and set Build Timing option to ‘ yes ‘. After that the time of every build will be displayed in the Output window.
Измерение времени выполнения фрагментов кода
В некоторых случаях необходимо измерить время выполнения фрагментов кода, например, с целью оптимизации программы. Измерить время выполнения позволяет функция clock() . Прототип функции:
Функция возвращает приблизительное время выполнения программы до вызова функции. Если время получить не удалось, функция возвращает значение (clock_t)(–1) . Чтобы измерить время выполнения фрагмента следует вызвать функцию перед фрагментом кода и сохранить результат. Затем вызвать функцию после фрагмента и вычислить разность между двумя значениями. Чтобы получить значение в секундах необходимо разделить результат на значение макроса CLOCKS_PER_SEC . Определение макроса выглядит следующим образом:
Для примера имитируем фрагмент кода с помощью функции Sleep() из WinAPI и произведем измерение времени выполнения (листинг 11.4).
Листинг 11.4. Измерение времени выполнения

Учебник C++ (Qt Creator и MinGW) в формате PDF
Помощь сайту
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов