Überlegungen zur Leistung für die Interoperabilität zwischen Direct3D9 und WPF
Zeigen Sie den Direct3D9-Inhalt mithilfe der D3DImage-Klasse an. Das Hosten von Direct3D9-Inhalten kann sich auf die Leistung Ihrer Anwendung auswirken. In diesem Thema werden bewährte Methoden zum Optimieren der Leistung beim Hosten von Direct3D9-Inhalten in einer Windows Presentation Foundation -Anwendung (WPF) beschrieben. Diese bewährten Methoden umfassen die VerwendungD3DImage und bewährte Methoden, wenn Sie Windows Vista, Windows XP- und Multimonitoranzeigen verwenden.
Hinweis
Codebeispiele, die diese bewährten Methoden veranschaulichen, finden Sie unter WPF und Direct3D9-Interoperation.
Sparsame Verwendung von D3DImage
Direct3D9-Inhalte, die in einer D3DImage-Instanz gehostet werden, werden nicht so schnell wie in einer reinen Direct3D-Anwendung gerendert. Das Kopieren der Oberfläche und das Leeren des Befehlspuffers können kostspielige Vorgänge sein. Da sich die Anzahl der D3DImage-Instanzen erhöht, tritt mehr Spülung auf und die Leistung wird beeinträchtigt. Aus diesem Grund sollten Sie D3DImage sparsam verwenden.
Bewährte Methoden für Windows Vista
Für optimale Leistung auf Windows Vista mit einer Anzeige, die für die Verwendung des Windows Display Driver Model (WDDM) konfiguriert ist, erstellen Sie Ihre Direct3D9-Oberfläche auf einem IDirect3DDevice9Ex
-Gerät. Dies ermöglicht die Oberflächenfreigabe. Die Grafikkarte muss die D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES
- und D3DCAPS2_CANSHARERESOURCE
-Treiberfunktionen für Windows Vista unterstützen. Alle anderen Einstellungen führen dazu, dass die Oberfläche durch Software kopiert wird, wodurch die Leistung erheblich reduziert wird.
Hinweis
Wenn Windows Vista über eine Anzeige verfügt, die für die Verwendung des Windows XP-BIldschirmtreibermodells (XDDM) konfiguriert ist, wird die Oberfläche unabhängig von den Einstellungen immer über die Software kopiert. Mit den richtigen Einstellungen und Grafikkarten sehen Sie eine bessere Leistung auf Windows Vista, wenn Sie den WDDM verwenden, da Oberflächenkopien in der Hardware ausgeführt werden.
Bewährte Methoden für Windows XP
Um optimale Leistung bei Windows XP zu erzielen, die das Windows XP-Bildschirmtreibermodell (XDDM) verwendet, erstellen Sie eine sperrbare Oberfläche, die sich beim Aufrufen der IDirect3DSurface9::GetDC
-Methode richtig verhält. Intern überträgt die BitBlt
-Methode die Oberfläche über Geräte in der Hardware. Die GetDC
-Methode funktioniert immer auf XRGB-Oberflächen. Wenn der Clientcomputer jedoch Windows XP mit SP3 oder SP2 ausgeführt wird und der Client auch über den Hotfix für die Funktion Fensterebene verfügt, funktioniert diese Methode nur auf ARGB-Oberflächen. Die Grafikkarte muss die D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES
-Treiberfunktionalität unterstützen.
Eine 16-Bit-Desktop-Anzeigentiefe kann die Leistung erheblich verringern. Ein 32-Bit-Desktop wird empfohlen.
Wenn Sie für Windows Vista und Windows XP entwickeln, testen Sie die Leistung auf Windows XP. Das Auslaufen des Videospeichers auf Windows XP ist ein Problem. Darüber hinaus verwendet D3DImage auf Windows XP aufgrund einer erforderlichen zusätzlichen Videospeicherkopie mehr Videospeicher und Bandbreite als Windows Vista WDDM. Daher können Sie erwarten, dass die Leistung auf Windows XP schlechter ist als auf Windows Vista für dieselbe Videohardware.
Hinweis
XDDM ist sowohl auf Windows XP als auch auf Windows Vista verfügbar; WDDM ist jedoch nur auf Windows Vista verfügbar.
Allgemeine bewährte Methoden
Wenn Sie das Gerät erstellen, verwenden Sie das D3DCREATE_MULTITHREADED
-Erstellungszeichen. Dadurch wird die Leistung reduziert, aber das WPF-Renderingsystem ruft Methoden auf diesem Gerät von einem anderen Thread auf. Achten Sie darauf, das Sperrprotokoll ordnungsgemäß zu befolgen, sodass nicht zwei Threads gleichzeitig auf das Gerät zugreifen.
Wenn das Rendern auf einem verwalteten WPF-Thread ausgeführt wird, wird dringend empfohlen, das Gerät mit dem D3DCREATE_FPU_PRESERVE
-Erstellungszeichen zu erstellen. Ohne diese Einstellung kann das D3D-Rendering die Genauigkeit von doppelt so genauen WPF-Vorgängen verringern und Renderingprobleme einführen.
Das Kacheln einer D3DImage-Datei ist schnell, es sei denn, Sie kacheln eine Nicht-Pow2-Oberfläche ohne Hardwareunterstützung oder wenn Sie eine Kachel oder ein DrawingBrush- oder VisualBrush-Element kacheln, das eine D3DImage enthält.
Bewährte Methoden für Multimonitoranzeigen
Wenn Sie einen Computer mit mehreren Monitoren verwenden, sollten Sie die zuvor beschriebenen bewährten Methoden befolgen. Es gibt auch einige zusätzliche Leistungsaspekte für eine Multi-Monitor-Konfiguration.
Wenn Sie den Hintergrundpuffer erstellen, wird er auf einem bestimmten Gerät und Adapter erstellt, aber WPF kann den Frontpuffer auf jedem Adapter anzeigen. Das Kopieren über Adapter hinweg, um den Frontpuffer zu aktualisieren, kann sehr teuer sein. Auf Windows Vista, das für die Verwendung des WDDM mit mehreren Grafikkarten und mit einem IDirect3DDevice9Ex
-Gerät konfiguriert ist, gibt es keine Leistungsstrafe, wenn sich der Frontpuffer auf einem anderen Adapter, aber immer noch derselben Grafikkarte befindet. Bei Windows XP und XDDM mit mehreren Grafikkarten gibt es jedoch eine erhebliche Leistungsstrafe, wenn der Frontpuffer auf einem anderen Adapter als der Hintergrundpuffer angezeigt wird. Weitere Informationen finden Sie unter Interaktion zwischen WPF und Direct3D9.
Leistungszusammenfassung
Die folgende Tabelle zeigt die Leistung des Frontpufferupdates als Funktion des Betriebssystems, des Pixelformats und der Oberflächensperrbarkeit. Bei dem Frontpuffer und dem Hintergrundpuffer werden davon ausgegangen, dass er sich auf demselben Adapter befindet. Abhängig von der Adapterkonfiguration sind Hardwareupdates im Allgemeinen viel schneller als Softwareupdates.
Oberflächen-Pixelformat | Windows Vista, WDDM und 9Ex | Andere Windows Vista-Konfigurationen | Windows XP SP3 oder SP2 w/ Hotfix | Windows XP SP2 |
---|---|---|---|---|
D3DFMT_X8R8G8B8 (not sperrbar) | Hardware-Aktualisierung | Softwareupdate | Softwareupdate | Softwareupdate |
D3DFMT_X8R8G8B8 (sperrbar) | Hardware-Aktualisierung | Softwareupdate | Hardware-Aktualisierung | Hardware-Aktualisierung |
D3DFMT_A8R8G8B8 (nicht sperrbar) | Hardware-Aktualisierung | Softwareupdate | Softwareupdate | Softwareupdate |
D3DFMT_A8R8G8B8 (sperrbar) | Hardware-Aktualisierung | Softwareupdate | Hardware-Aktualisierung | Softwareupdate |
Weitere Informationen
.NET Desktop feedback