Для начала надо удалить из проекта вычисление координат:

xi - xO+rect.bottom/3*cos(i*6.283/N); yi - yO+rect.bottom/3*sin(i*6.283/N);

Также потребуется убрать операторы вывода примитивов:

Ellipse(hdc2,xi-2.yi-2.xi+2.yi+2);

Выводимые при пуске программы числа дадут оценку «накладных расходов» на работу с контекстом и организацию циклов. В данном примере они составили около 1 % в варианте с двумя контекстами и 10 % в других случаях.

Если удалить только вычисления, то к расходам на организацию циклов и настройку контекста добавится время вывода примитивов. Проверка показала, что время вывода примитивов при повторном запросе контекста составило менее четверти общих затрат процессорного времени, а при использовании двух контекстов - более 90 %.

Таким образом, можно сделать вывод о возможности ситуаций, в которых исключение повторного запроса и настройки контекста может существенно повысить быстродействие программ. Сохранение и восстановление контекста следует применять в проектах, которые передают общий контекст в цикле функциям рисования отдельных объектов. При необходимости выполнить специфические для конкретного объекта изменения в начале работы функции контекст сохраняется, а перед выходом из нее восстанавливается. Сохранение и восстановление контекста в этом случае выполняется не ради ускорения приложения, а для унификации методики работы с разными типами объектов.

Если в программе одно состояние контекста используется особенно часто, то при регистрации окна в поле sty 1 е структуры WNDCLASS можно задать флаг CS_0WNDC. В этом случае окно будет «помнить» старый контекст и при вызове функции GetDCC) будут восстанавливаться те значения атрибутов, которые использовались в контексте перед выполнением функции ReleaseDCC). При этом контекст, фактически, создается с получением ресурсов от операционной системы при создании окна, а уничтожается при закрытии окна. Поэтому кроме экономии времени на изменении заданных по умолчанию элементов контекста и сами функции GetDCO, ReleaseDC() выполняются быстрее.


⇐ Предыдущая| |Следующая ⇒