MFC: CListCtrl langsam bei vielen Items

Gast #472349
Hallo,

ich verwende in meinem MFC-Projekt ein CListCtrl in dem ich Daten 
anzeigen lasse. Die Daten werden sequentiell aus einer Datei geladen und 
Zeile für Zeile mit InsertItem und SetItemText zur Liste hinzugefügt.
Leider dauert das Einfügen bei sehr vielen Elementen (20000 Zeilen, 40 
Spalten) immer länger (nicht lineares Verhalten).

Gibt es eine Möglichkeit das ganze zu Beschleunigen, wenn ja, wie?
Eine Sortierung ist nicht nötig, die Daten werden einmal hinzugefügt und 
müssen nur in der Liste angezeigt und bei Knopfdruck alle gelöscht 
werden.

Gruß,
Domi
Gast
owner draw machen und daten selbst in den strukturen handeln.. das geht 
dann schneller...

www.codeproject.com ... da sollten genug infos dazu sein

73
Gast
Folgender Code könnte hilfreich sein:

lpListCtrl->SetRedraw(FALSE);
//Items in das ListCtrl schieben;
lpListCtrl->SetRedraw(TRUE);

Sollte schneller werden, da es das Neuzeichnen nach jedem InsertItem() 
verhindert.

Gruß FSt
Gast
Danke für die Antworten!

Letzteres (neu zeichnen temporär deaktivieren) hat keinen merkbaren 
Unterschied gebracht.

Mit einer virtuellen Liste wird es wohl um einiges schneller werden, 
aber momentan hab ich keine Zeit das auszuprobieren.

Gruß,
Domi

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.