[gelöst] Welchen Containertyp
[gelöst] Welchen Containertyp
Hallo!
Ich wollte mich mal erkundigen, welche Erfahrungen so vorliegen...
Brauche demnächst einen ContainerTypen, der viele Datensätze (10000 und mehr) in sich trägt und in dem die Suche möglichst schnell abläuft...
Was nimmt man denn da unter QT am besten?
Ich wollte mich mal erkundigen, welche Erfahrungen so vorliegen...
Brauche demnächst einen ContainerTypen, der viele Datensätze (10000 und mehr) in sich trägt und in dem die Suche möglichst schnell abläuft...
Was nimmt man denn da unter QT am besten?
Zuletzt geändert von sascha am 28. März 2006 07:00, insgesamt 2-mal geändert.
OK dann sag mir doch mal, wo "viel" anfängt... Eventuell hat isch mein "Problem" dann ja auch erledigt...
Aber ansonsten werden Datensätze abgespeichert, die Geo-Koordinaten und Bildkoordinaten enthalten. Dann sollen die Geo-Koordinaten durchsucht werden, um einen "Puffer" zu berechnen.
Dafür sollen alle x gefunden werden, für die gilt geo-x1 < x < geo-x2
und das selbe für y. Dann bekomme ich eine Liste von Punkten, zu der ich wiederum die Distanzen vom aktuellen Punkt zu allen anderen "selektierten" Punkten berechnen muss.
Aber ansonsten werden Datensätze abgespeichert, die Geo-Koordinaten und Bildkoordinaten enthalten. Dann sollen die Geo-Koordinaten durchsucht werden, um einen "Puffer" zu berechnen.
Dafür sollen alle x gefunden werden, für die gilt geo-x1 < x < geo-x2
und das selbe für y. Dann bekomme ich eine Liste von Punkten, zu der ich wiederum die Distanzen vom aktuellen Punkt zu allen anderen "selektierten" Punkten berechnen muss.
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
Hallo alle zusammen!
Also ich habe noch mal genau nachgerechnet und muss somit mein Thread etwas verändern bzw. erweitern....
Also ich habe festgestellt, dass ich mit Textdateien arbeiten werde, die bis zu 1 Million Zeilen haben könnten....
Nun habe ich mal einen ganz einfach eTestlauf gemacht und musste feststellen, dass ein reines lesen mittels readLine() schon an die 40 Sekunden bei 500.000 Zeilen benötigt... Schalte ich nun noch das splitting ein, sind wir schon bei > 2 Minuten....
Gibt es eine Möglichkeit so große Dateien effektiv zu nutzen?
Ich bräuchte nur eine Möglichkeit das File schnell zu parsen, damit ich nur die benötigten Werte speichern muss...
Habe mal was von "memory mapped files" gelesen, kann damit aber nichts anfangen....
Also wenn Ihr eine Idee habt?!
Also ich habe noch mal genau nachgerechnet und muss somit mein Thread etwas verändern bzw. erweitern....
Also ich habe festgestellt, dass ich mit Textdateien arbeiten werde, die bis zu 1 Million Zeilen haben könnten....
Nun habe ich mal einen ganz einfach eTestlauf gemacht und musste feststellen, dass ein reines lesen mittels readLine() schon an die 40 Sekunden bei 500.000 Zeilen benötigt... Schalte ich nun noch das splitting ein, sind wir schon bei > 2 Minuten....
Gibt es eine Möglichkeit so große Dateien effektiv zu nutzen?
Ich bräuchte nur eine Möglichkeit das File schnell zu parsen, damit ich nur die benötigten Werte speichern muss...
Habe mal was von "memory mapped files" gelesen, kann damit aber nichts anfangen....
Also wenn Ihr eine Idee habt?!
QByteArray
Hallo,
also um schnell eine Datei auszulesen ist, wie du schon gemerkt hast, Zeile für Zeile lesen extrem langsam.
Besser ist es, die Datei mit QFile::readAll komplett einzulesen, das ganze in ein QByteArray(Binär) bzw. einen QString(Text) zu speichern und diesen dann mittels eines QDataStreams bzw QTextStreams zu parsen. Da kannst du dann auch wieder readline benutzen.
also um schnell eine Datei auszulesen ist, wie du schon gemerkt hast, Zeile für Zeile lesen extrem langsam.
Besser ist es, die Datei mit QFile::readAll komplett einzulesen, das ganze in ein QByteArray(Binär) bzw. einen QString(Text) zu speichern und diesen dann mittels eines QDataStreams bzw QTextStreams zu parsen. Da kannst du dann auch wieder readline benutzen.
Code: Alles auswählen
QFile::readAllAlternativ könnte man auch
Code: Alles auswählen
QFile::read(qint64 maxSize)Außerdem könnte man vielleicht das ganze noch in einen QThread auslagern.
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
Vielleicht wäre die Frage einen eigenen Thread wert, aber ich stell sie hier mal:
Ich habe eine Klasse von QThread abgeleitet, nun ist es aber doch so, dass nur die run() Methode parallel läuft. Da ich aber den meisten Code (eigentlich den ganzen) in Slots und ein paar private Funktionen habe, bringt es mir kaum etwas. Gibt es eine Möglichkeit Slots zb. parallel ausführen zu lassen, oder diese privaten Funktionen? Oder kann man wirklich nur das in run() parallel ausführen?
SG Alexander
Ich habe eine Klasse von QThread abgeleitet, nun ist es aber doch so, dass nur die run() Methode parallel läuft. Da ich aber den meisten Code (eigentlich den ganzen) in Slots und ein paar private Funktionen habe, bringt es mir kaum etwas. Gibt es eine Möglichkeit Slots zb. parallel ausführen zu lassen, oder diese privaten Funktionen? Oder kann man wirklich nur das in run() parallel ausführen?
SG Alexander
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten: