Seite 1 von 1

QListView: Element-Count > 1 Mio.

Verfasst: 23. September 2011 20:36
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

Re: QListView: Element-Count > 1 Mio.

Verfasst: 23. September 2011 20:43
von upsala
Wo kommen die Daten her? Datenbank, Datei,...?

Re: QListView: Element-Count > 1 Mio.

Verfasst: 23. September 2011 20:47
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]

Re: QListView: Element-Count > 1 Mio.

Verfasst: 23. September 2011 21:20
von Christian81
Da ein QListView ein Model braucht welches Du selbst implementieren kannst sollte das kein Problem sein -> Doku zu Model/View.

Re: QListView: Element-Count > 1 Mio.

Verfasst: 23. September 2011 21:23
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.

Re: QListView: Element-Count > 1 Mio.

Verfasst: 23. September 2011 21:48
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.