Frage

Ich habe ein Problem, etwas schnell in .NET zeichnen. Ich glaube nicht, dass irgend etwas sollte insbesondere viel Zeit in Anspruch nehmen, aber auf jeder Maschine ich es versucht habe, ich bekomme ernsthafte Probleme. Dies wird in VS2008 .NET implementiert, C # (mit einem paar Sachen in C ++, aber nichts mit Bezug auf die Zeichnung).

Ich habe drei Bildschirme, und der Benutzer sollte zwischen ihnen ohne Verzögerung umschalten kann. Auf dem ersten Bildschirm gibt es vier Tasten, acht Benutzersteuerungen, bestehend aus zwei Tasten 6 und Etikett jeweils ein Textfeld und eine Drop-Down-Box. Ich glaube nicht, es als so viel zu sein.

Auf dem zweiten Bildschirm, ich habe vier Etiketten, sechs Tasten und zwei Steuerelemente, die sechs Tasten haben, ein opengl Zeichnung Kontext und etwa zehn Etikett je.

Auf dem dritten Bildschirm, ich habe eine OpenGL-Kontext und 10 Tasten.

von jedem Bildschirm wörtlich nimmt etwa eine Sekunde auf jedem Bildschirm Flipping. Zum Beispiel, wenn ich von dem zweiten Schirm auf den ersten Flip, Rohlinge die gesamte Anwendung aus, die Hintergrundbild zeigt, und dann wird der erste Bildschirm gezeichnet. Viele Male wird ein Bildschirm Stück für Stück gezeichnet, als ob die Maschine absichtlich handcrafting waren zart und köstlich Buchstaben in einer Fabrik in Schweden und Versand dann diese einzeln auf meinen Bildschirm. Ich übertreibe, und ich möchte das klarstellen, weil ich nicht glaube, Schweden als dieser Neuaufbau so langsam ist.

Der erste und der zweite Bildschirm im Speicher gezogen und dort gespeichert, mit nur einem ‚.Hide ()‘ und ‚.Show ()‘ sie erscheinen und verschwinden zu lassen. Double-Buffering scheinen keine Rolle zu. Der dritte Bildschirm wird jedes Mal neu gezeichnet, und erscheint die gleiche Menge an Zeit in Anspruch nehmen als die erste und die zweite zu ziehen.

Alle Gedanken? Was könnte da los? Wie kann ich es aufzuspüren?

Danke!

Edit: Ich sollte hinzufügen, dass jede C ++ Verarbeitung und dergleichen in einem eigenen Thread passiert. Es gibt die gelegentlichen MethodInvoke die Ergebnisse der Operation auf dem Bildschirm zu zeichnen, aber dieses Problem tritt auf, ohne Funktionen aufrufen, nur durch Drücken der Tasten von einem Bildschirm zum nächsten zu gehen.

War es hilfreich?

Lösung

Neben dem Profiler, der erwähnt wurde, können Sie auch Ihre OpenGL Kontexte deaktivieren. Wenn Sie ein Speed-up bemerken, dann wissen Sie es Ihre Grafik Zeug, und Sie können Ihre Optimierungen entsprechend konzentrieren.

Punkte für schwedischen Humor ausgezeichnet.

Andere Tipps

  

Wie kann ich es aufzuspüren?

DotTrace - http://www.jetbrains.com/profiler/

Sind Sie tun andere Verarbeitung während des „-Bildschirm Flip“ Event? andere als einfach das Formular im Stich gelassen werden neu gezeichnet? Wenn Sie etwas zwischen Flips verarbeiten (vielleicht Ihre c ++ zusätzlich?), Und Sie sind nicht Multi-Threading, erhalten Sie, dass weißen out-Effekt. Die Form wartet wahrscheinlich für CPU-Zeit auf sich selbst neu zu zeichnen.

Ich habe noch nie OpenGL so selbst verwendet, aber Sie könnten, dass auf dem Weg schauen wollen, dass die OpenGL Kontexte gespiegelt werden. Wenn von einer Seite zur anderen wechseln Sie vielleicht ein Gerät zurückgesetzt werden immer (in DirectX Bedingungen), die die Verzögerung verursacht werden könnten.

Wenn überhaupt möglich, ein Gerät ein, um zur Rückseite System.Drawing.Bitmap hat, und verwenden Sie diese Bitmap auf den Bildschirmen. Machen Sie Ihre OpenGL-Code bekannt, der aktuellen Seite der Benutzer ist und Sie Macht erhalten Sie die Geschwindigkeit bis Sie suchen.

Um dies zu testen, bevor große Änderungen vorgenommen hat, versuchen, den OpenGL-Displays auf dem Formular zu entfernen.

Das ist alles aus einer Laune heraus.

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