Laden...

Gui baut sich zu langsam auf

Erstellt von cmpxchg vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.954 Views
C
cmpxchg Themenstarter:in
192 Beiträge seit 2005
vor 18 Jahren
Gui baut sich zu langsam auf

Hallo,
wie kann in in c# die GUI schneller aufbauen lassen?
Wenn ich eine Form mit vielen controls öffne, kann ich sehen, wie sie nacheinander erscheinen (das geht aber sehr schnell). Ausserdem habe ich so flicker-Effekte beim Resizing.

Wie kann ich dies Verbessern? Ich hab mal bei der Form DoubleBufferer auf true gesetzt, aber keine Verbesserung.

  1. Habe ich einen Algorithmus, der umständerhalber einen Button auf Enabled, dann auf Disabled (Enables = false), dann wieder auf Enabled setzt. Dies erzeugt auch einen flickereffekt, obwohl ich davon ausging, dass die Form nicht neu gezeichnet wird (weil diese 3 zuweisungen innerhalb einer Methode passieren)

Was kann ich da machen um dies zu Verbessern? Danke

564 Beiträge seit 2006
vor 18 Jahren

Hi!

Auf deine erste Frage: Ich nehme evtl. an, dass das an der Kompilierung in Maschinencode liegt. Theoretisch müsste sich die Form schneller aufbauen, wenn du sie ein zweites mal lädst, da der Code dann schnon compiliert ist.
Um dies wegzubekommen könntest du deine Assembly bei der Installation mit ngen precomilieren.

Auf deine zweite: Diese Effektre treten bei nur auf, wenn ich zwischenzeitlich etwas ganz anderes (meinetwegen in das Label) reinschreibe und dies wieder mit was anderem überschreibe. Es könnte daran liegen, dass dein Code alles überschreibt. Bei mir passiert soetwas nicht.

der Marcel

:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]

308 Beiträge seit 2005
vor 18 Jahren

Hallo cmpxchg,

hast du das Problem auch, wenn du einen Release Build ohne Debugger laufen lässt (STRG+F5 im VS).

Die Ausführung von Programmen unter dem VS-Debugger kann dramatisch langsamer sein, als ohne.

Vorallem wenn man mit vielen Breakpoints, meheren Threads und Abfangen aller geworfenen Exceptions debuged.

Ich hatte da schon Code der auf 5% der Release-Geschwindigkeit lief (sehr nervig beim debuggen).

N
177 Beiträge seit 2006
vor 18 Jahren

Cadi hat Recht was die GUI Geschwindigkeit betrifft. Geh einfach mal in dein Bin/Release Verzeichnis des Projekts und starte das Programm. Es sollte dann eigentlich schnell genug laufen.

Ansonsten würde mich auch interessieren, wie ich das Flickern beim Resizing weg bekomme. DoubleBuffer oder Bitmap-Blitting hilft evtl. bei eigenen Controls innerhalb eines festen Windows. Aber wenn man das Window selbst verschiebt oder dessen Grösse auf dem Desktop ändert, dann flickert es wie blöde.

Edit: Zumindest der Windows-Rahmen und die Titelleiste flackern weiterhin.

F
234 Beiträge seit 2006
vor 18 Jahren

Gibt es da nicht diese zwei Funktionen: SuspendLayout und ... keine Ahnung .
Wenn ihr das Layout jetzt beim start des verschiebens suspended und beim beenden wieder freigebt, ob das was bringt. Sorry, mein Vorschlag ist etwas Laienhaft ausgedrückt, evtl auch falsch. Wäre jetzt nur meine erste Idee gewesen.

P.S.: Ist das kein Thema für den das "Forms"-Forum ?

N
177 Beiträge seit 2006
vor 18 Jahren

SuspendLayout() geht nur für Child-Windows. Habe mich damit auch noch nicht sonderlich beschäftigt, habe aber die Vermutung, dass es nicht trivial bis unmöglich ist. Nicht ohne Grund flackert der Rahmen (soweit ich weiss) bei allen Anwendungen.

F
234 Beiträge seit 2006
vor 18 Jahren

Naja, aber wenn man die Child-Windows schonmal nicht während dem Resize/Position berechnen muß, dann bleibt doch für den Parent mehr Power. Das wär meine logische Überlegung. Oder versteh ich da was falsch ?

6.862 Beiträge seit 2003
vor 18 Jahren

Original von cmpxchg
...
Wenn ich eine Form mit vielen controls öffne
...

Was ist bei dir in dem Fall den eigentlich viel?
Weil es ist ja bekannt das es bei wirklich vielen Controls es problemen mit der Geschwindigkeit gibt, und es da besser ist, einzelne Controls in Usercontrols zusammenzufassen. Das bringt einiges an Geschwindigkeit.

Baka wa shinanakya naoranai.

Mein XING Profil.

F
234 Beiträge seit 2006
vor 18 Jahren

@talla:
Kannst Du was zu meiner Idee sagen? Du kennst DIch besser aus und ich würd gern wissen, ob ich damit total daneben liege.

N
177 Beiträge seit 2006
vor 18 Jahren

Original von Fil
Naja, aber wenn man die Child-Windows schonmal nicht während dem Resize/Position berechnen muß, dann bleibt doch für den Parent mehr Power. Das wär meine logische Überlegung. Oder versteh ich da was falsch ?

Es ist vermutlich keine Frage der Power. Das Problem liegt vermutlich eher am VSync des Desktops. Der müsste double-buffered sein, nicht nur dein Window.

6.862 Beiträge seit 2003
vor 18 Jahren

Also Suspend/ResumeLayout sind auch immer die ersten Dinge an die ich denke, obs in dem Fall was bringt hängt halt wirklich von den Controls ab, aber was verschieben angeht, kann ich dir 100% Recht geben 😁

Baka wa shinanakya naoranai.

Mein XING Profil.

F
234 Beiträge seit 2006
vor 18 Jahren

Super, danke. Dachte schon, ich müsste mich wieder mal in Bücher stürzen ...

N
177 Beiträge seit 2006
vor 18 Jahren

Original von talla
Also Suspend/ResumeLayout sind auch immer die ersten Dinge an die ich denke, obs in dem Fall was bringt hängt halt wirklich von den Controls ab, aber was verschieben angeht, kann ich dir 100% Recht geben 😄 Dann sind wir aber wieder im Win2000 Zeitalter, wo nur der Rahmen und nicht die Inhalte mit verschoben/resized werden.

F
234 Beiträge seit 2006
vor 18 Jahren

Werden sie schon, nur nicht während des verschiebens/resizens. D.h.: Nur einmal rechnen, statt bei jedem Resize-Event / Verschieben - Event.

S
1.047 Beiträge seit 2005
vor 18 Jahren

gibt es denn eine möglichkeiet das man im programm das so einstellt, das die fenster beim verschieben und resize nicht neu gezeichnet werden?
also unabhängig von der windowseinstellung.

ich find das geflacker recht störend. doublebuffering und co ist alles drin aber flackert eben immer noch 🙁
z.b. dieser splitcontainer ist so ein kandidat

auch bricht bei mir teilweise die performance recht stark einwenn ich die neuen stripcontrols benutze 🙁

ich frag mich wie die jungs dsa bei paint.net gemacht haben, da läuft alles super fix... abr die haben da wohl mit etwas c/c++ nachgeholfen 😕

F
234 Beiträge seit 2006
vor 18 Jahren

Original von sheitman
gibt es denn eine möglichkeiet das man im programm das so einstellt, das die fenster beim verschieben und resize nicht neu gezeichnet werden?
also unabhängig von der windowseinstellung.

SuspendLayout(), ResumeLayout(), davon reden wir doch schon ne Weile ...

S
1.047 Beiträge seit 2005
vor 18 Jahren

hmpf..... is ja schon gut ^^

hab das grad mal implementiert und fkt so wie ich es gewollt hab 🙂

ich ha bdeshalb gefragt, weil ich das schon mal probiert hatte und dann hat das aber nicht den gewünschten effekt erbracht... allerdings war das mit einem usercontrol... naja... man möge mir vergeben für meine wiederholte frage 🙂

btw: ResizeBegin und ResizeEnd im zusammenhang mit den SuspendLayout und ResumeLayout wars 🙂
is jetzt wie bei den java anwendungen die ich kenne^^