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


Рекомендации по DirectComposition

Заметка

Для приложений в Windows 10 рекомендуется использовать API-интерфейсы Windows.UI.Composition вместо DirectComposition. Дополнительные сведения см. в обновите классическое приложение для рабочего стола с помощьювизуального слоя.

В этом разделе описаны рекомендации по использованию Microsoft DirectComposition.

Лучшие практики

В следующей таблице представлены рекомендации по работе с визуальными элементами Microsoft DirectComposition.

Практика Описание
После создания устройства DirectComposition вызовите метод IDCompositionDevice::CheckDeviceState в ответ на каждое сообщение WM_PAINT, чтобы убедиться, что устройство по-прежнему действительно.
Если устройство Инфраструктуры графики Microsoft DirectX (DXGI) потеряно, устройство DirectComposition, связанное с устройством DXGI, также теряется. При обнаружении потерянного устройства DirectComposition отправляет сообщение WM_PAINT всем окнам. Вызов CheckDeviceState в ответ на каждое сообщение WM_PAINT позволяет определить, все еще действителен ли объект устройства DirectComposition и, если нет, предпринять шаги по восстановлению содержимого.
Дополнительные сведения см. в объекте Device.
Создавайте только то количество визуальных элементов, которое необходимо для композиции или анимации, и уничтожайте их сразу после того, как DirectComposition завершит их использование.
DirectComposition использует графический модуль обработки (GPU), ресурс, который использует приложение с другими приложениями и операционной системой. Эта практика гарантирует, что все приложения и операционная система получают достаточные ресурсы GPU.
Дополнительные сведения см. в разделе Визуальные элементы.
Не скрывайте визуальные элементы, задав непрозрачность в значение 0%; Вместо этого удалите визуальные элементы из визуального дерева.
Для настройки непрозрачности до 0% требуется больше системных ресурсов, чем удаление их из визуального дерева.
Дополнительные сведения см. в разделе Opacity и визуальное дерево.
Не скрывайте визуальный элемент, применяя пустой (размером ноль) клип-прямоугольник к визуальному элементу. Вместо этого удалите визуальный элемент из визуального дерева.
Удаление визуального элемента из визуального дерева приводит к повышению производительности, чем применение пустого прямоугольника клипа.
Дополнительные сведения см. в разделе обрезки .
Не применяйте прямоугольник клипа к визуальному элементу, если прямоугольник клипа не нужен, например прямоугольник клипа, содержащий весь растровый рисунок визуального элемента.
Ненужные прямоугольники отсечения негативно влияют на производительность системы.
Дополнительные сведения см. в разделе об обрезке.
Если вам нужна большая одноцветная растровая карта, создайте небольшую растровую поверхность, а затем примените преобразование масштабирования вместо создания полноразмерной поверхности.
Применение преобразования масштабирования к меньшей поверхности использует меньше системных ресурсов, чем поверхность полного размера.
Дополнительные сведения см. в Bitmap объектах и преобразованиях.
Избегайте одновременного применения трехмерных преобразований к нескольким уровням визуального дерева, например, к родительскому элементу и его потомкам.
Применение трехмерных преобразований к нескольким уровням визуального дерева может привести к непредвиденным результатам, так как трехмерные преобразования не умножаются в дереве. Например, поворот на 90 градусов вокруг оси Y на дочернем объекте и поворот 90 градусов вокруг оси Y на родительском элементе приводит к тому, что оба визуальных элемента поворачиваются на нет.
Дополнительные сведения см. в разделе Эффекты.

Вопросы безопасности

В следующих статьях приведены рекомендации по написанию защищенного кода C++ .

Как использовать DirectComposition