Скорость работы программного обеспечения должна находиться в диапазоне, приемлемом для пользователя. Часто повышение скорости этих недолговечных, но часто используемых процедур значительно увеличивает общую скорость программного обеспечения.
Чтобы улучшить скорость, конечно, сначала нужно уметь измерять время. Хорошо, тогда давайте рассмотрим ситуацию на трассе. Как только прозвучит выстрел, нажмите секундомер, чтобы начать отсчет времени, и закончите отсчет, когда игрок достигнет финиша. В это время вы можете узнать время, затраченное игроком. . Перед началом следующего раунда секундомер необходимо обнулить. .NET2.0 также предоставляет такой секундомер: класс Stopwatch, который позволяет более точно измерять время.
Тест скорости:
Производительность и тестируемость программного обеспечения — сложная тема. Чтобы гарантировать, что приложение соответствует ожиданиям пользователя, необходимо учитывать его производительность и возможность тестирования в ходе цикла разработки. Это имеет решающее значение на этапе проектирования: плохой дизайн почти наверняка приведет к ухудшению пользовательского опыта. Однако сам по себе хороший дизайн не гарантирует, что программа будет работать эффективно. Качество конечного кода не менее важно.
Измерить длительную рутину довольно просто. Если процесс длится несколько минут, для записи времени можно использовать часы. Например, для процесса, выполнение которого занимает две минуты, улучшение на 10 % может сэкономить 12 секунд, что легко определить.
А если вы хотите измерить очень краткосрочный процесс, вам следует подумать о большей точности. Например, есть несколько очень маленьких процедур, выполнение которых может занять всего тысячную долю секунды, но будет вызвано 1 миллион раз. Кумулятивный эффект очевиден. В предыдущих версиях .NET framework нужно было использовать функции Windows API, а в .NET framework 2.0 Microsoft представила класс Stopwatch (он же наш секундомер) для упрощения задач измерения времени.
Класс секундомера:
Использовать класс Stopwatch для измерения времени очень просто. Как и секундомеры в реальной жизни, объекты этого класса также могут запускать, останавливать и возвращать к нулю (обнулять) счетчик, но это гораздо точнее обычных секундомеров. Он может иметь точность до микросекунд (то есть миллионов секунд). .доля секунды).
Пример кода:
Чтобы продемонстрировать использование секундомера, давайте воспользуемся фрагментом кода. Вот консольное приложение, которое накапливает все целые числа от 1 до 1 миллиона:
использование пространства
имен StopWatchClass
;
{
классная программа
{
static void Main(string[] args)
{
длинный итог = 0
для (int i = 1; я <= 10000000; я++)
{
итого += я;
}
}
}
}
Добавьте объект «Секундомер»:
Класс Stopwatch расположен в пространстве имен System.Diagnostics. Вот код после добавления объекта:
использование системы;
использование
пространства имен System.Diagnostics StopWatchClass
;
{
классная программа
{
static void Main(string[] args)
{
Таймер секундомера = новый секундомер();
длинный итог = 0
для (int i = 1; я <= 10000000; я++)
{
итого += я;
}
}
}
}
Управляйте объектом «Секундомер»:
Stopwatch предоставляет несколько методов для управления объектом Stopwatch. Метод Start запускает операцию синхронизации, а метод Stop останавливает синхронизацию. В это время, если метод Start используется во второй раз, отсчет времени продолжится, а окончательный результат отсчета времени будет суммировать два значения тайминга. Чтобы избежать этой ситуации, используйте метод Reset, чтобы сбросить объект до нуля перед вторым таймером. Ни один из этих трех методов не требует параметров. Код:
использование системы;
использование
пространства имен System.Diagnostics StopWatchClass
;
{
классная программа
{
static void Main(string[] args)
{
Таймер секундомера = новый секундомер();
длинный итог = 0;
таймер.Старт();
for (int я = 1; я <= 10000000; я++)
{
итого += я;
}
Таймер.Стоп();
}
}
}
Прочитайте результаты секундомера:
<!--[if !supportLists]--><!--[endif]--> После завершения отсчета времени следующим шагом будет чтение результатов отсчета времени. Класс Stopwatch предоставляет следующие свойства:
<!--[if !supportLists]--><!--[endif]--><!--[if !supportLists]--><!--[endif]-->
Elapsed: возвращает объект TimeSpan, представляющий временной интервал;
ElapsedMilliсекунды: возвращает количество микросекунд, прошедших по времени. Точность немного меньше, подходит для немного более длительного времени;
ElapsedTicks: Возвращает количество прошедших тактов таймера. Такт таймера — это наименьшая возможная единица измерения объекта «Секундомер». Длина такта таймера определяется конкретным компьютером и операционной системой. Значение статического поля «Частота» объекта «Секундомер» представляет количество тактов таймера, содержащихся в одной секунде. Обратите внимание на разницу в единицах времени, используемых свойством Ticks объекта TimeSpan.
Одно из этих свойств следует выбирать исходя из временной задачи. В нашей примерной программе свойство Elapsed обеспечивает необходимую точность для вывода количества прошедших микросекунд. Это также самая высокая точность TimeSpan.
Вот окончательный код программы:
использование системы;
использование
пространства имен System.Diagnostics StopWatchClass
;
{
классная программа
{
static void Main(string[] args)
{
Таймер секундомера = новый секундомер();
длинный итог = 0;
таймер.Старт();
for (int я = 1; я <= 10000000; я++)
{
итого += я;
}
timer.Stop();
десятичный микро = timer.Elapsed.Ticks / 10m;
Console.WriteLine("Время выполнения составило {0:F1} микросекунд.", micro);
}
}
}
Кроме того, используйте свойство IsRunning, чтобы проверить, отсчитывает ли экземпляр Stopwatch, и используйте метод StartNew, чтобы запустить новый таймер.