Поделиться через


Рекомендации и рекомендации по производительности

В этом разделе представлен набор рекомендаций по использованию API Диспетчера окон рабочего стола (DWM).

Этот раздел состоит из следующих подразделов.

Практические рекомендации по приложениям для DWM

Если приложение обрабатывает масштабирование точек на дюйм (точек на дюйм), вы можете объявить приложение как поддерживающее dpi и предотвратить автоматическое масштабирование, установив флаг с поддержкой dpi в манифесте программы или вызвав функцию SetProcessDPIAware во время инициализации программы.

Если композиция DWM включена, незащищенные приложения больше не получают WM_PAINT сообщений и не получают запрос на повторную отрисовку. Содержимое каждого окна уже доступно для создания изображения экрана.

Окна WS_EX_TRANSPARENT верхнего уровня должны сочетаться с WS_EX_LAYERED стилем для целей проверки нажатия. WS_EX_TRANSPARENT в классическом смысле без перенаправления, полезно для дочерних окон в иерархии окон, принадлежащих одному потоку, но не предназначенных для окон верхнего уровня.

Используйте области или слои для создания формированных или смешанных окон. Обратите внимание, что в Windows Vista и более поздних версиях Windows настраиваемое рисование только части окна верхнего уровня не предоставляет требуемое устаревшее содержимое в неотрисованных регионах.

Такие API, как GetDCOrgEx , можно использовать для определения определенных фактических значений. Если у вас есть контекст устройства (DC) для перенаправленного окна, источник, возвращенный GetDCOrgEx , не будет соответствовать источнику окна на экране. Вместо этого источник будет источником задней буферной поверхности для окна: (0, 0).

Если все остальное не удается, отключите отрисовку окна, вызвав функцию DwmSetWindowAttribute .

Методики рисования для DWM

Избегайте рисования непосредственно на основной поверхности дисплея. Это приведет к отключению композиции DWM до тех пор, пока приложение не выпустит основную поверхность устройства.

Оцените, должно ли приложение предоставлять собственную двойную буферизацию. DWM фактически удвоит содержимое и представляет окно в одном кадре.

Избегайте чтения или записи на дисплее контроллера домена. Хотя он поддерживается DWM, мы не рекомендуем использовать его из-за снижения производительности.

Избегайте рисования в не клиентской области. Хотя приложение может получить доступ к этой области, а рисование поддерживается API Microsoft Win32, это может привести к потере любой стеклянной границы окна.

Избегайте смешивания интерфейса графических устройств Windows (GDI) и Microsoft DirectX, если они не перекрываются. Если требуется смешивание, нарисуйте содержимое GDI в области программного обеспечения DirectX и объедините его перед созданием на экране, либо нарисуйте их в отдельных окнах.

Используйте функцию BitBlt или StretchBlt вместо Windows GDI+, чтобы представить документ для отрисовки. GDI+ отрисовывает по одной строке сканирования за раз с помощью программной отрисовки. Это может вызвать мерцание в приложениях.

Регион клиента Blur-Behind DWM

Отрисовка эффекта размытия является ресурсоемкой операцией как для ЦП, так и для графического процессора (GPU). Разработчикам приложений настоятельно рекомендуется учитывать последствия использования размытия клиентской области, чтобы не потреблять лишние ресурсы. Следует соблюдать особую осторожность в следующих случаях:

  • Если предполагается, что размер размытия клиентской области будет значительным, даже если в самой размытой области не будет происходить обновлений. Размытие должно быть отрисовывается на случай, если какие-либо обновления происходят в размытой области окна, что приводит к затратам на ЦП и GPU. Кроме того, операции с окном (перемещение, изменение размера и переходы) повлечет за собой дополнительные затраты.
  • При ожидании значительных обновлений в размытой клиентской области. Для этого потребуется перекраска размытия при каждом обновлении и чрезмерное потребление ресурсов.
  • Если предполагается, что размытие будет охватывать значительную область и обновления этой области также ожидаются, настоятельно рекомендуется не размывать клиентную область.