Тест производительности кода C#
QueryPerformanceCounter — функция WinApi возвращающая значение высокоточного счетчика производительности. Такой инструмент полезен для тестирования производительности системы или ее отдельных элементов. Я написал класс, который основан на работе этой функции. Этот класс можно использовать для тестирования скорости работы кода ваших приложений с точностью до нескольких миллисекунд. Актуально при тесте кода, который выполняется меньше чем за секунду.
В следующем классе используются функции QueryPerformanceCounter и QueryPerformanceFrequency. Класс содержит два метода Start и Stop, а также свойство Duration, которое возвращает время работы в секундах.
Код класса:
/// <summary>
/// Счетчик производительности
/// </summary>
class HightPerfomanceCounter
{
[DllImport("kernel32.dll")]
extern static short QueryPerformanceCounter(ref long x);
[DllImport("kernel32.dll")]
extern static short QueryPerformanceFrequency(ref long x);
long timeStart = 0, timeStop = 0;
/// <summary>
/// Время выполениния
/// </summary>
/// <returns></returns>
public string Duration
{
get
{
long freq = 0;
QueryPerformanceFrequency(ref freq);
return ((timeStop - timeStart) * 1.0f / freq) + " сек";
}
}
/// <summary>
/// Старт таймера
/// </summary>
public void Start()
{
QueryPerformanceCounter(ref timeStart);
}
/// <summary>
/// Стоп таймера
/// </summary>
public void Stop()
{
QueryPerformanceCounter(ref timeStop);
}
}
И пример использования:
HightPerfomanceCounter counter = new HightPerfomanceCounter();
string k = string.Empty;
counter.Start();
for (int i = 0; i < 40000; i++)
{
k = k + i;
}
counter.Stop();
Console.WriteLine("Время работы 1-го теста составило {0}", counter.Duration);
StringBuilder sb = new StringBuilder();
counter.Start();
for (int i = 0; i < 40000; i++)
{
sb.Append(i);
}
counter.Stop();
Console.WriteLine("Время работы 2-го теста составило {0}", counter.Duration);

Результаты теста показали, что второй тест цикла работает в несколько десятков раз быстрее, хотя выполняют они одну и ту же функцию.
Исходный код проекта прилагается>>>
Популярность: 11%
Если у вас возникли вопросы, вы можете оставить их в комментариях

