Frage

Ich habe eine Windows CE-Anwendung, die eine Menge von Vektorgrafiken und an Orten verwendet, ist ziemlich langsam. Ich bin derzeit mit GDI für für flimmerfreie Auffrischungen über eine Bitmap-Rendering. Normalerweise ist ich Windowing auf einen Teil einer großen 3D-Karte in. Bei einigen Geräten (zum Beispiel 166 MHz SH4), wird diese langsam mit 3-5 zweiten Aktualisierungszeiten für große Datenmengen. Meine Frage ist;

  • Hat jemand irgendwelche Vergleiche auf der relativen Geschwindigkeit von Grafikoperationen auf Windows Mobile im Vergleich zu Win32 getan. Anders ausgedrückt, ein Profil erstellen Ergebnisse aus einer Win32-Version der Software für eine WinCE-Version, unter der Annahme, wir nur suchen ein GDI-Aufrufe.

  • Hat jemand versucht, Profilierung an Bord auf einem WinCEplattform (C ++ app), wenn ja, mit welchen Werkzeugen.

  • Ist jemand Kenntnis von Methoden Zuggeschwindigkeit auf Windows CE zu verbessern. Ich bin gerade im Fastgraph folgendes Feedback von einer vorherigen Frage , aber das ist eine etwas längerfristige Lösung. Bad und alles, wie es ist, ich bin auf der Suche nach etwas schneller für eine bevorstehende Veröffentlichung zu implementieren.

War es hilfreich?

Lösung

Vor dem Windows CE 6.0 - also einschließlich aller Windows Mobile / Windows Embedded Handheld-Versionen - der Code Grafik wurde in einem anderen Prozess (GWES.EXE) implementiert und erfordert eine prozessübergreifende Aufruf jedes Mal, wenn ein GDI Anruf. CE 5.x Cross-Prozess Anrufe sind viel billiger als auf dem Desktop, aber immer noch teurer als einen reiner Funktionsaufruf oder einen Aufruf in der Kernel-Modus.

Auf dem Desktop wird GDI seit NT 4.0 im Kernel-Modus implementiert. In der ursprünglichen NT 3.1, es wie das CE-Modell war, Cross-Prozess aufruft. Um den Aufwand für den prozessübergreifende Anrufe oder Benutzer / Kernel-Modus-Schalters, Desktop-GDI Chargen Operationen auf der Benutzer-Modus Seite zu mildern, bis Sie etwas tun, was es erfordert, die Warteschlange zu spülen - wie eine andere Stift oder Pinsel auswählen, oder über einen Link der Legacy-Funktionen, die etwas anderes als BOOL zurückgibt - oder der Puffer voll ist, oder Sie es explizit durch den Aufruf GdiFlush spülen

.

Windows CE nicht über diese Dosierung Fähigkeit hat - alle Anrufe führen zu einem direkten Aufruf an den GWES-Prozess, so dass es viel langsamer. Sie können es mildern, indem sie in jedem Aufruf so viel Arbeit wie möglich zu tun. Wenn Sie eine komplexe Linie benötigen, sollten Linienzug anstatt einzelne MoveToEx / LineTo nennt. Versuchen Sie, nur um jedes Pixel zu berühren einmal anstatt überlappende Objekte machen, und die Verwendung der ungültigen Region nur Farbe Teile des Bildschirms machen, die neu zu streichen müssen (Verwendung GetUpdateRgn oder GetUpdateRect aber tun Sie es vor dem Aufruf BeginPaint, die die Region gültig markiert).

Die CE-Grafikbeschleunigung Modell recht einfach ist, basiert um Bit-blits. Es ist nicht die größere Reihe von Funktionen unterstützen, die Windows 2000-Modell Desktop-Gerätetreiber unterstützen. Ob jede Beschleunigung verfügbar ist, hängt davon ab, ob die Hardware selbst hat ein Beschleuniger-Chip -. Viele Geräte die LCD-Controller in dem Anwendungsprozessor eingebettet verwenden, die in der Regel keine Beschleunigung macht

Sie können durch das Deaktivieren Dosierung, mit GdiSetBatchLimit CE Verhalten auf dem Desktop simulieren die Begrenzung auf 1 Sehen Sie sich auch, um den SVGA-Grafiktreiber Beschleunigung zu deaktivieren. Unter Windows Vista oder Windows 7, wird GDI nicht beschleunigt, wenn Sie die Aero-Umgebung verwenden, alle Operationen in Software implementiert werden, obwohl Windows 7 einige neue Bit-Blit-Hardware-Beschleunigung Fähigkeiten zurück.

Windows CE 6.0 hat einen neuen Kernel und Prozessmodell, das als auf dem Desktop von Windows (vor Vista) GDI in Kernel-Modus bewegt, so dass die Kosten für eine GDI-Funktion des Aufrufs sollte leicht reduziert werden. Es gibt noch keine Dosierung.

Andere Tipps

Ich habe nicht viel Wissen über die Grafik Seite der Dinge aber aus Erfahrung, wenn man sich einige spezifischen Hardware-bezogene Dinge schnell sein will, die näher an „Metall“, desto schneller können Sie bekommen (und desto schwieriger es wird!). So könnte man sich in mit Direct Draw oder Direct 3D (altho ich denke, sie D3D fallen und für WM7 zu OpenGL eS geht über) . Sie können gerne in Art und Weise Game Developers Verwendung suchen.

In der Frage der Profile, ich habe keine gefunden, aber ich habe meine eigene .

Ich habe eine Menge dieser Art von Benchmarking durchgeführt, und GDI-Operationen sind langsamer auf WinCE als normale Win32, aber nur langsamer im Verhältnis zu den langsameren Prozessoren auf WinCE-Geräten. Mit anderen Worten, scheint es nicht mit GDI in WinCE traf jede zusätzliche Leistung zu sein.

Sorry, ich habe keine Antworten auf Ihre letzten beiden Fragen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top