Resourcen Managment von Controls(Windows Forms)



  • Hallo alle zusammen,
    ich sitze grade ein einem Programm das verschiedenen Datenquellen auswertet und dann in einem bestimmten Layout wieder ausgibt. Durch das vorgegebene Layout und eine recht große Menge an zu verarbeitenden Daten kommt es dadurch dazu das dem Main Window mehrere tausend Labels hinzugefügt werden. Und da kommen wir auch schon zum Problem der Sache.
    Immer wenn die gesamt Anzahl der hinzugefügten Labels sich oberhalb der 7500 befindet schmiert das Programm ohne besonder Fehlermeldung ab. Nur das typische MS window (Programm hat ein Problem festgestellt und muss beendet werden) popt auf.
    Da auch das anzeigen im Seitenformat (immer nur 1000 Labels gleichzeitig) zum Durchblättern nichts bringt, komme ich zu der Annahme das sich die ganzen Labels irgendwo im speicher / Graka speicher aufhalten.
    Die frage ist nun - wie kann ich die Labes effektiv adden und löschen um die Resourcen frei zu bekommen / bzw garnicht erst zu belegen??

    Momentan wird das Label wie folgt dem Mainform hinzugefügt (Label ist ein Zeiger):

    Mainform->SuspandLayout();
    Mainform->Controls->Add(Label);
    Mainform->ResumeLayout();

    Und so wieder entfernt:
    Mainform->Control->Remove(Label);

    Wäre für jeden Tipp dankbar!!



  • Willst Du nicht was Effizienteres verwenden? DataGridView?



  • Okay das wort Datensätze war falsch.
    Es handelt sich leider nicht um eine Datenbank Anbindung sondern im Endeffekt um ein Programm das über verschiedene Schnittstellen mit anderen Programmen kommunziert, oder sich aus Text, und XML Files infos zieht.
    Daher fällt ein DataGridView leider aus, und ich bin auf Forms lösungen wie Wie Textboxen, Labes etc angewiesen - und die machen mir oben beschreibene Probleme.
    Aus Gründen der Übersichtlichkeit fällt leider auch eine RichTextBox aus.



  • Auron der Streuner schrieb:

    Okay das wort Datensätze war falsch.
    ...
    Daher fällt ein DataGridView leider aus,
    ...

    Wieso? Ein DataGridView muss nicht zwingend mit einer Datenbindung arbeiten. Ich denke, dass tausende von Controls einfach zuviel sind. Ich würde mir Gedanken machen, wie diese Infos angeordnet werden müssen und sie durch ein Control ersetzen, welche diese Daten 'virtuell' verwalten, also z.B: das im Grid,welches nur ein Benutzerobjekt beansprucht.



  • Ich wusste gar nicht das man DataGridViews auch ohne Db benutzen kann - wieder was gelernt :p
    Aber in diesem speziellen Fall habe ich ein fest vorgegebenes Layout, das ich über eine Tabelle oder DataGridView nicht lösen kann - da aucheinige Bilder und Filmsequenzen angeordnet werden müssen. Trotzdem vielen Dank für den Tip.

    Aber für alle die es Intressiert - was ich nicht wusste und der Punkt wo das Problem herrührt war, dass man beim Control->Remove oder Control->Clear jedes Child Object einzelln löschen, muss damit der Platz im Grafikspeicher frei gegeben wird.
    Es reicht also nicht das oberste Layout zu löschen...
    tja muss man wissen - nun gehts. Trotzdem danke für eure Hilfe!


Anmelden zum Antworten