Direct2D / GDI+ und langsame Windows-Formen zeichnen - Was kann getan werden?

Ich arbeite viel mit Visual Studio 2008, .NET C# 2.0-3.5 und Windows Forms, und ich habe bemerkt, wie viele vor mir, dass GDI+ ist extrem langsam in der Zeichnung Kontrolliert. Hinweis, dass ich nicht viel mit Bildern (JPG, GIF usw) sehr viel. Bilder werden nur als Symbole in bestimmten Orten. Dies ist tatsächlich Steuerelemente/Formulare/etc, die langsam zu ziehen.

Das Problem ist, dass Sie sehen können Steuerelemente gezogen wird, und es kann mehrere Sekunden dauern, einen scheinbar einfachen Satz von Steuerelementen gezeichnet werden. Dh, seine rückständigen und schrecklich.

Habe ich tests gemacht, wo ich nur eine Anzahl von Etiketten (40-50) auf eine form, drücken von F5 ausführen und warten, bis Sie gezogen werden. Wieder lag und nicht eine sehr schöne Erfahrung.

So, dann ist WPF, die möglicherweise dieses problem zu beheben, aber ich/wir sind nicht bereit sich zu bewegen in WPF. Ich bin auf der Suche rund um für workarounds oder fixes, und ich stolperte über Direct2D und beim Lesen auf, dass einige andere Bibliotheken.

Setzen Im ein bisschen verwirrt und so diese Fragen:

1)
Zuerst, was ich möchte, ist eine Recht saubere und einfache Weg, um einfach nur ersetzen GDI+ etwas schneller und die hardware-beschleunigte Ansatz. Ist es möglich zu tun, ohne den Umweg über WPF und ohne neu zu schreiben, alle meine Windows-Forms-code?

Immer, wenn ich etwas zu Lesen auf Direct2D ich sehen lange Blöcke von in der Regel schrecklich C++ - code, der mir sagt, wie das manuelle schreiben von code für das zeichnen. Ich will nicht, dass.

2)
Beim Lesen im Netz, stolperte ich über SlimDX, aber ich kann nicht herausfinden, wie es zu benutzen (und ich gebe zu, ich habe nicht versucht, sehr viel zu schreiben). Können sagen, ich habe bereits eine GUI-Anwendung (Windows Forms, standard C# - code) - kann ich die irgendwie verwenden SlimDX (oder so ähnlich), einfach zu "ersetzen" GDI+ ohne viel umschreiben?

Mein problem ist ich finde keine Beispiele oder so sagen Sie mir, wenn es möglich ist, SlimDX, Direct2D oder andere ähnliche Dinge in meiner bereits erstellten Windows Forms-software, und wenn es möglich ist - wie es zu tun.

Hoffe ich bin nicht zu unscharf =)

==EDIT== 2010-09-22

Habe ich einige tests in meiner realen app, und isoliert man die langsamen Dinge:

Wenn ich text hinzufügen einige Labels in einem UserControl, die Steuerelemente Größe selbst zu passen, der text. Zum Beispiel, die mit GroupControl passt ein bisschen auf die Größe des Textes, die wurde nur Hinzugefügt, um die .Text-Eigenschaft des Labels.

Sind es etwa 10 Label-Steuerelemente. Das erste mal die Beschriftungen werden aktualisiert, und damit sind die Größen geändert, der gesamte Prozess dauert etwa 500 ms. Das zweite mal, dass die Beschriftungen werden aktualisiert, und keine Größe ändert, dauert es etwa 0 ms.

==EDIT 2== 2010-09-22

Einen gefunden, der die slow-downs. Dann das hinzufügen einer Zeichenfolge, die Text-Eigenschaft es ist langsam, wenn der text, der Hinzugefügt wird, unterscheidet sich in der string - Länge aus dem text, dass war es vor dem update.

Im mit DevExpress-Bibliotheken, und LabelControls kann eingestellt werden, um AutoSizeMode. Wenn ich auf "Keine" dann ist der lag Weg gehen wird, wenn Sie text Hinzugefügt haben, unterscheidet sich in der Länge von dem vorherigen text. Ich denke, das problem wird sein, das gleiche für die normale Label-Steuerelement, wie es auch eine AutoSize = true/false einstellen.

Jedoch ist es ein "workaround", aber immer noch beweist mein Punkt - es ist wirklich langsam, wenn die Größe, die ziemlich lahm ist.

Ted, können Sie nach ein paar triviale Winforms-Beispielprojekt, das zeigt Ihre performance-Problem?
Kann wirklich sehen, wie man Dateien hier posten. Aber was ich versucht habe, war zu erstellen-1-Form auf, die form, die ich auf Platz 1 TabControl mit 3 Seiten. Auf jeder Seite werde ich mit Label, TextBox und ComboBox (200 Kontrollen pro tabPage). Ich habe dann einfach auszuführen, klicken Sie auf/zwischen den Seiten umzuschalten und dort können Sie sehen, wie es lag. Das gleiche in normalen apps, nur noch schlimmer in der Regel =(
ich bin mit DevExpress-Bibliotheken - dann der erste test, um zu versuchen, ist die Verwendung von eingebauten standard-Windows-Steuerelemente, um zu sehen, ob Sie schneller sind. IMHO, ist die Tatsache, dass Sie mit einem Drittanbieter-Bibliothek von Steuerelementen sollte in Ihrem ersten Absatz! [Ich habe nun den entsprechenden devexpress tag, hoffentlich machen das noch deutlicher.]

InformationsquelleAutor Ted | 2010-09-17

Schreibe einen Kommentar