// Вывод линий на картинку
// Выводится Cnt линий со случайными координатами
QueryPerformanceCounter(StartTime);
for I:= 1 to Cnt do
begin
Pict.Canvas.Pen.Color:=
RGB(Random(256), Random(256), Random(256));
Pict.Canvas.MoveTo(Random(PictSize), Random(PictSize));
Pict.Canvas.LineTo(Random(PictSize), Random(PictSize));
end;
QueryPerformanceCounter(EndTime);
GridResults.Cells[ColNum, 1]:=
FloatToStrF((EndTime — StartTime) / Freq * 1000, ffFixed, 10, 2);
// Вызываем Application.ProcessMessages, чтобы GridResults
// перерисовался в соответствии с новым значением ячейки
Application.ProcessMessages;
// Второй тест — вывод рисунка на экран
QueryPerformanceCounter(StartTime);
// Повторяем вывод рисунка на экран Cnt раз
// Чтобы пользователь мог видеть, когда вывод
// заканчивается, каждый раз добавляем к координатам
// случайную величину
for I:= 1 to Cnt do
Canvas.Draw(XOfs + Random(50), 10 + Random(50), Pict);
QueryPerformanceCounter(EndTime);
GridResults.Cells[ColNum, 2]:=
FloatToStrF((EndTime — StartTime) / Freq + 1000, ffFixed, 10, 2);
Application.ProcessMessages;
// Третий тест — доступ к свойству ScanLine
QueryPerformanceCounter(StartTime);
// Обращаемся к случайной строке свойства ScanLine
// Cnt раз
for I:= 1 to Cnt do
P:= Pict.ScanLine(Random(PictSize));
QueryPerformanceCounter(EndTime);
GridResults.Cells[ColNum, 3]:=
FloatToStrF((EndTime — StartTime) / Freq * 1000, ffFixed, 10, 2);
Application.ProcessMessages;
finally
Pict.Free;
end;
end;
Для измерения скорости работы будем использовать счетчик производительности — это высокопроизводительный счетчик, поддерживаемый системой для измерения производительности. Текущее значение счетчика можно узнать с помощью функции QueryPerformanceCounter
QueryPerformanceFrequency
. Этот счетчик позволяет получить более точные результаты, чем традиционно применяющаяся для таких целей функция GetTickCount
. Теоретически, счетчик производительности может не поддерживаться аппаратной частью (в этом случае функция QueryPerformanceFrequency
вернет нулевую частоту), однако все современные компьютеры такой счетчик поддерживают, поэтому его можно применять без опасений.В зависимости от параметра PixelFormat
DoTest
создает DDB- или DIB-изображение и тестирует скорость исполнения операций с ним. В первом тесте Cnt
раз рисуется линия случайного цвета со случайными координатами — так проверяется скорость рисования на картинке. Разумеется, это весьма односторонний тест, т. к. при рисовании других примитивов будет, скорее всего, иное соотношение скоростей для DIB и DDB. Но общее представление о соотношении скоростей он все же дает.Во втором тесте полученное изображение Cnt