Laden...

InitializeComponent() optimieren

Erstellt von codeGenerator vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.033 Views
C
codeGenerator Themenstarter:in
52 Beiträge seit 2008
vor 13 Jahren
InitializeComponent() optimieren

Hey Leute,

ich habe eine WinForm, die sehr viele Controls (Textboxen und Labels) beinhaltet. Das Formular wird als Mdi-Children erzeugt. Öffne ich das Formular das erste mal, dauert der Aufruf von InitializeComponent() recht lange (ca. 4 Sekunden). Genauer gesagt, dauert die Erzeugung der ganzen Controls (Konstruktoraufrufe) so lange.
Schließe ich das Formular und öffne es erneut, geht das ganze super schnell.

Hat jemand eine Idee, ob und wie man das was optimieren kann?

Danke
codeGenerator

1.378 Beiträge seit 2006
vor 13 Jahren

Weniger Controls verwenden!

Wieviele sind denn auf dem Formular und überhaupt in der Applikation ca. gleichzeitig sichtbar?

//Edit: Dabei mein ich nicht sichtbar im Sinne von man kann sie sehen sondern, sie sind auf einem Formular, dass gerade irgendwo offen ist.

C
codeGenerator Themenstarter:in
52 Beiträge seit 2008
vor 13 Jahren

Es geht um eine Personalstammerfassung...da kann man schlecht einfach Felder weg lassen! Es sind so ca. 300 Eingabefelder (also 300 Textboxen + 300 Labels) angeordnet in einem TabControl...

Habe inzwischen auch festgestellt, dass der Methodenaufruf selbst sehr lange dauert. Breakpoint im Konstruktor bei InitializeComponent(). Noch ein Breakpoint in der ersten Zeile der Methode. Zwischen beiden Breakpoints vergehen gut 3-4 Sekunden. Die Aufrufliste zeigt mir nichts weiter an und es werden scheinbar auch keine neuen Assemblies dazu geladen....soweit ich das mit den VS-Debug-Tool überblicken kann...

731 Beiträge seit 2006
vor 13 Jahren

Hi,

dann lade die einzelnen Controls erst wenn eine TabSeite aktiviert wird. Vielleicht bringt das was?

MfG
wax

5.299 Beiträge seit 2008
vor 13 Jahren

Es geht um eine Personalstammerfassung...da kann man schlecht einfach Felder weg lassen! Es sind so ca. 300 Eingabefelder...

Das fällt mir schwer zu glauben. Die Erfassungs-Maske für einen einzigen Mitarbeiter erfordert 300 Eingaben??

Ich bezweifel, ob es überhaupt legal wäre, so viel von seinen Leuten wissen zu wollen.

Der frühe Apfel fängt den Wurm.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo codeGenerator,

Weniger Controls verwenden!

da es die "Hätte ich genauso geschrieben"-Funktion um positives Feedback aus der Community zu ermöglichen noch nicht gibt, unterstütze ich den Beitrag von xxxprod dringend(!) auf traditionelle Weise durch diese Antwort.

herbivore

H
116 Beiträge seit 2008
vor 13 Jahren

Es geht um eine Personalstammerfassung...da kann man schlecht einfach Felder weg lassen! Es sind so ca. 300 Eingabefelder (also 300 Textboxen + 300 Labels) angeordnet in einem TabControl...

Da möchte ich nicht arbeiten...

Habe inzwischen auch festgestellt, dass der Methodenaufruf selbst sehr lange dauert...

Passiert da vielleicht noch was anderes, wie etwa Dateizugriffe oder Datenbankabfragen etc.? Ansonsten würde ich auch den Vorschlag versuchen, Controls in den TabPages erst aufzubauen, wenn diese aktiviert werden.

Hinrich

4.221 Beiträge seit 2005
vor 13 Jahren

Schließe ich das Formular und öffne es erneut, geht das ganze super schnell.

Aufgrund dieses Satzes würde ich auch eher ein Problem an einer anderen Stelle vermuten... nachladen von Dll's, Datenbank-Abfragen... oder Oeffnen einer DB-Verbindung....

Wenn es rein nur an den Controls liegen würde (mal davon ausgehend, dass das Form auch wirklich Disposed und eine neue Instanz erstellt wurde) müsste die Laufzeit mehr oder weniger identisch sein bei einem nachfolgenden Aufruf.

Ansonsten pro Ansicht ein UserControl erstellen und dann erst bei Bedarf auf die TabPage laden (wie die Kollegen schon vorgeschlagen haben).

Gruss
Programmierhans

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...