QListView: Element-Count > 1 Mio.

Alles rund um die Programmierung mit Qt
Antworten
Siassei
Beiträge: 6
Registriert: 12. Mai 2008 13:06

QListView: Element-Count > 1 Mio.

Beitrag von Siassei »

Hallo,

ich habe ein kleines Speicherproblem und suche nach einer Lösung.

Die komplette Liste beinhaltet mehrere Mio. Zeilen. Natürlich werden nicht alle Zeilen auf einmal dargestellt und müssen auch nicht im Speicher vorhanden sein. Wie implementiert man in Qt ein dynamisches Laden/Entladen von Items einer ListView?

Über Stichworte / groben Lösungsweg wäre ich sehr Dankbar.

Gruß, Thomas
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Re: QListView: Element-Count > 1 Mio.

Beitrag von upsala »

Wo kommen die Daten her? Datenbank, Datei,...?
Siassei
Beiträge: 6
Registriert: 12. Mai 2008 13:06

Re: QListView: Element-Count > 1 Mio.

Beitrag von Siassei »

upsala hat geschrieben:Wo kommen die Daten her? Datenbank, Datei,...?
[offtopic]
Was für eine Rolle spielt das? In beiden Fällen hätte (DB / File) ich eine Methode zu je read(lineNumber), write(lineNumber).
Vorerst kommen die Daten aus einer Datei. Dateigröße liegt zwischen 1 - 4 GB.]
[/offtopic]
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QListView: Element-Count > 1 Mio.

Beitrag von Christian81 »

Da ein QListView ein Model braucht welches Du selbst implementieren kannst sollte das kein Problem sein -> Doku zu Model/View.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Re: QListView: Element-Count > 1 Mio.

Beitrag von upsala »

Da du ListView geschrieben hattest gehe ich davon aus, daß du eine QListView benutzt und dazu eigenes Model geschrieben hast, das von QAbstractListModel abgeleitet ist.

Deswegen gehe ich aufgrund deiner Antwort davon aus, daß du sehr schnell auf jede Zeile in deiner Datei zugreifen kannst, somit reicht es doch in die data() und setData()-Methoden dein read(lineNumber) und write(lineNumber) einzubauen.

Da ich aber davon ausgehen kann, daß dein read und write nicht so schnell sind, da deine Zeilen sehr wahrscheinlich unterschiedlich lang sind, würde ich mir als erstes mal mit QList/QVector eine Cache aufbauen, in dem vermerkt ist welche Zeile an welcher Position in der Datei zu finden ist. Dies kann event. auch im Hintergrund in einem separaten QThread stattfinden. Außerdem würde ich mir mit QCache bzw. QContiguousCache einen Cache aufbauen um die zuletzt aufgerufenen Zeilen zwischenzupuffern.

Da du mit 1Mio Zeilen rechnest dürfte auch der Speicherbedarf für die Caches kein Problem darstellen.
Siassei
Beiträge: 6
Registriert: 12. Mai 2008 13:06

Re: QListView: Element-Count > 1 Mio.

Beitrag von Siassei »

upsala hat geschrieben:Deswegen gehe ich aufgrund deiner Antwort davon aus, daß du sehr schnell auf jede Zeile in deiner Datei zugreifen kannst, somit reicht es doch in die data() und setData()-Methoden dein read(lineNumber) und write(lineNumber) einzubauen..
Danke für eure Antworten. Ich verwende Qt nur ab und zu benutze, kenne ich die API nicht so gut wie ich möchte. Christian81 hat bereits den nötigen Hinweis gegeben und ich werde ein eigenes Modell (von QAbstractItemView abgeleitet) implementieren.
Antworten