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


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

Содержимое Direct3D9 можно разместить с помощью D3DImage класса. Размещение содержимого Direct3D9 может повлиять на производительность приложения. В этом разделе описаны рекомендации по оптимизации производительности при размещении содержимого Direct3D9 в приложении Windows Presentation Foundation (WPF). Эти рекомендации включают использование D3DImage и рекомендации при использовании Windows Vista, Windows XP и многоэкторных мониторов.

Замечание

Примеры кода, демонстрирующие эти рекомендации, см. в разделе WPF и Direct3D9 Interoperation.

Используйте D3DImage умеренно

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

Рекомендации по Windows Vista

Для оптимальной производительности в Windows Vista с дисплеем, настроенным для использования модели драйвера отображения Windows (WDDM), создайте поверхность Direct3D9 на IDirect3DDevice9Ex устройстве. Это обеспечивает общий доступ к поверхности. Видеоадаптер должен поддерживать возможности драйвера D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES и D3DCAPS2_CANSHARERESOURCE в Windows Vista. Любые другие параметры приводят к копированию поверхности с помощью программного обеспечения, что значительно снижает производительность.

Замечание

Если в Windows Vista есть дисплей, настроенный для использования модели драйвера дисплея Windows XP (XDDM), поверхность всегда копируется с помощью программного обеспечения независимо от параметров. При правильных настройках и наличии подходящей видеокарты, вы заметите более высокую производительность в Windows Vista при использовании WDDM, так как копирование поверхностей выполняется оборудованием.

Рекомендации по Windows XP

Для оптимальной производительности в Windows XP, которая использует модель драйвера отображения Windows XP (XDDM), создайте блокируемую поверхность, которая работает правильно при вызове IDirect3DSurface9::GetDC метода. Внутренне метод BitBlt передает поверхность между устройствами на аппаратном уровне. Метод GetDC всегда работает на поверхностях XRGB. Однако если клиентский компьютер работает под управлением Windows XP с пакетом обновления 3 (SP3) или с пакетом обновления 2 (SP2), и если у клиента также установлено исправление для функции многоуровневого окна, этот метод работает только на поверхностях ARGB. Видеоадаптер должен поддерживать функции D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES драйвера.

16-разрядная глубина отображения рабочего стола может значительно снизить производительность. Рекомендуется использовать 32-разрядный рабочий стол.

Если вы разрабатываетесь для Windows Vista и Windows XP, проверьте производительность в Windows XP. Нехватка памяти видео в Windows XP является проблемой. Кроме того, D3DImage в Windows XP используется больше видеопамяти и пропускной способности, чем в Windows Vista WDDM, из-за необходимости делать дополнительную копию видеопамяти. Поэтому вы можете ожидать, что производительность в Windows XP хуже, чем в Windows Vista для одного и того же видео аппаратного обеспечения.

Замечание

XDDM доступен как в Windows XP, так и в Windows Vista; однако WDDM доступен только в Windows Vista.

Общие рекомендации

При создании устройства используйте D3DCREATE_MULTITHREADED флаг создания. Это снижает производительность, но система отрисовки WPF вызывает методы на этом устройстве из другого потока. Не забудьте правильно следовать протоколу блокировки, чтобы два потока не обращаются к устройству одновременно.

Если визуализация выполняется в управляемом потоке WPF, настоятельно рекомендуется создать устройство с флагом создания D3DCREATE_FPU_PRESERVE. Без этого параметра отрисовка D3D может снизить точность операций двойной точности WPF и привести к проблемам с отрисовкой.

Плитка D3DImage происходит быстро, если вы не плитите поверхность, отличную от pow2, без поддержки оборудования, или если вы плитите DrawingBrush или VisualBrush, которые содержат D3DImage.

Лучшая практика для многоэкранных дисплеев

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

При создании заднего буфера он создается на определенном устройстве и адаптере, но WPF может отображать передний буфер на любом адаптере. Копирование между адаптерами для обновления переднего буфера может быть очень дорогостоящим. В Windows Vista, настроенной на использование WDDM с несколькими видеокартами и устройством IDirect3DDevice9Ex, если передний буфер находится на другом адаптере, но по-прежнему той же видеокарты, нет штрафа за производительность. Однако в Windows XP и XDDM с несколькими видеоадаптерами существует значительный штраф в производительности при отображении переднего буфера на другом адаптере, отличном от заднего буфера. Дополнительные сведения см. в разделе WPF и Direct3D9 Interoperation.

Сводка по производительности

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

Формат пикселей поверхности Windows Vista, WDDM и 9Ex Другие конфигурации Windows Vista Windows XP с пакетом обновления 3 (SP3) или пакетом обновления 2 (SP2) с исправлением. Windows XP с пакетом обновления 2 (SP2)
D3DFMT_X8R8G8B8 (не заблокировано) Обновление оборудования Обновление программного обеспечения Обновление программного обеспечения Обновление программного обеспечения
D3DFMT_X8R8G8B8 (с возможностью блокировки) Обновление оборудования Обновление программного обеспечения Обновление оборудования Обновление оборудования
D3DFMT_A8R8G8B8 (не заблокировано) Обновление оборудования Обновление программного обеспечения Обновление программного обеспечения Обновление программного обеспечения
D3DFMT_A8R8G8B8 (может быть заблокирован) Обновление оборудования Обновление программного обеспечения Обновление оборудования Обновление программного обеспечения

См. также