Lange Ladezeit beim Umschalten der TabControl

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von MaHu1983.

    Lange Ladezeit beim Umschalten der TabControl

    Moin Zusammen,

    bisher war ich nur ein stiller Leser in diesem Forum, weil alle meine bisherigen Probleme schon durch die existierenden Beiträge gelöst werden konnten. Insofern schon mal ein allgemeines Dankeschön für den bisherigen Support :)

    Nun aber zu meinem aktuellen Problem:

    Ich programmiere seit einiger Zeit eine Anwendung, die als Reporting Tool für Service Techniker fungieren soll. Die Techniker tragen vor Ort Ihre Berichte ein und mit der Zeit entsteht quasi ein Service Lebenslauf für die entsprechende Maschine.

    Die Daten, die dort von den Technikern eingetragen werden, werden in einem SQL Server gehalten und von einem typisierten Dataset an die Anwendung gegeben.
    Bisher habe ich die Darstellung der Inhalte durch ein schnödes Datagridview realisiert. Da ich aber auch ein Fan davon bin, das Frontend ein bissl schicker zu gestallten, habe ich die Anzeige der Berichte nun in einer Art Timeline aufgebaut (etwa in der Art, wie soziale Netzwerke sie nutzen :) ). Ich durchlaufe also die Einträge zu einer Maschine und erstelle zu jedem Eintrag ein TableLayoutPanel, welches wiederum diverse, teilweise verschachtelte, Controls enthält. Die TableLayoutPanels werden dann untereinander, nach absteigendem Datum sortiert, angezeigt.

    Beim Laden der Daten entsteht dabei für diese Ansicht eine Ladezeit von T > 1 Sekunden. Je nach Anzahl der zu erstellenden Einträge. Das stört mich allerdings nicht wirklich. Mein Problem ist, dass die Anwendung mehrere Seiten beinhaltet, welche ich auf ein Tab Control verteilt habe. Schalte ich die zwischen den anderen Seiten hin und her geschieht das ohne Verzögerung. Schalte ich jedoch auf die Berichtsseite mit meinen Service Einträgen, dauert es jedes mal wieder die Zeit T bevor die TabControl wirklich umschaltet, obwohl alle Controls ja schon beim Event zum Laden der Daten erstellt werden. Gibt es eine Möglichkeit dies zu beschleunigen/vermeiden?

    Falls gewünscht, poste ich auch gerne den entsprechenden Codeteil. Es handelt sich allerdings nur um eine ForEach Schleife, die ein RowArray durchläuft. In dieser Schleife wird die aktuelle Row an eine Sub übergeben, in der per Dim die Controls angelegt, per With formatiert und per Controls.Add in das jeweilige Parent Control hinzugefügt werden.

    Vieln Dank schon mal im Voraus.

    Beste Grüße
    Hi,
    ich nehme mal an dass das daran liegt, dass das TabControl jedes mal sehr viele Controls laden muss um deine Timeline anzuzeigen. Ich würde dir raten, diese Anzeigen auf GDI+ umzustellen, da sowas mit Controls sehr ineffizient und vor allem unschön ist. Das würde dann alle Ladezeiten stark verkürzen.

    LG
    Twometer
    An Error 404 occurred while loading signature...
    Hi,

    MaHu1983 schrieb:

    danke für die Antwort. Ich dacht, die Controls werden einmal generiert und gut.

    Ja einmal generiert werden sie auch aber das TabControl muss sie immer wieder neu laden.


    MaHu1983 schrieb:

    GDI+ sagt mir im Moment noch nichts, aber ich werde mich mal darüber schlau machen.

    GDI+ ist das Drawing API von Microsoft (Also System.Drawing.Image, Grahpics usw.) (Doku gibts z.B. hier: Klick, ganz unten is auch ein Beispiel ;) , aber google Hilft hier auch ziemlich gut)

    LG
    Twometer
    An Error 404 occurred while loading signature...
    Danke für die Links. Ich bin gerade erstmal beim VB Entwicklerhandbuch von MS gelandet.

    Wird wohl ziemlich viel, aber ich denke, wenn mir das Frontend wichtig ist, werde ich auf Dauer nicht um da Thema herumkommen. Paint Events hab ich auch schon vereinzelt in meiner Anwendung benutzt, wusste es aber nicht diese unter dem Begriff GDI+ einzuordnen.

    Bin dann mal lesen....

    Danke und Gruß

    MaHu1983
    Hast du Code der beim Umschalten der Tab-Page ausgeführt wird? Es gibt natürlich einige Tricks um diese Vorgänge zu beschleunigen, aber da muss man immer speziell auf den Anwendungsfall schauen. Ansonsten mit einer Stopwatch viel analysiere und schauen, wo die Zeit verbraten wird.
    Hallo Bluespide,

    da gibt es eigentlich nicht viel Code. Ich schalte ja nur die Seite auf der Tab Control um.
    Das einzige ist, dass ich nicht den Reiter der TC, sondern einen eigenen Button verwende. Hat aber letztendlich genau die gleiche Funktion.

    Wie Twometer schon sagt, wird es wohl daran liegen, dass die Controls immer wieder erneut zur Anzeige gemalt werden müssen. Code zum überprüfen und optimieren gibt es da nicht bzw. wüsste ich nicht, an welcher Stelle ich nachsehen sollte.

    Beste Grüße
    Hallo Rainman,

    danke für den Tipp, aber daran liegt es nicht. Die Controls sind ja schon generiert und müssen wohl nur noch einmal wieder gezeichnet werden, wenn ich in der TabControl hin und her schalte. Es dauert dann einige Sekunden, bis der die TC reagiert und den gewünschten Tab öffnet.

    Ich habe mir jetzt so geholfen, dass ich nur 5 Einträge generiere. So kann die TC innerhalb von 2 Sekunden umschalten. Das ist für mich OK.
    Die folgenden Einträge erstelle ich dann immer erst, wen auf dem Panel ganz nach unten gescrollt wurde. Immer 5 Dazu.

    Danke an alle.

    Gruß

    MaHu1983