verzögerte Initialisierung mit QDirModel und Netzlaufwerken
verzögerte Initialisierung mit QDirModel und Netzlaufwerken
Hallo,
ich habe ein extrem nerviges Problem mit einem QDirModel, das durch einen QTreeView das komplette Dateisystem darstellt: die Initialisierung dauert nämlich (unter Windows), wenn nicht verfügbare Netzlaufwerke vorhanden sind, extrem lang.
Habe das Problem schon ziemlich lange (seit Qt 4.0) und mit jedem neuen Release vergeblich gehofft, dass das Problem endlich gelöst wird (auch mit der aktuellen Version 4.4 besteht es noch; 4.5 habe ich noch nicht probiert).
Die Bug-Meldung http://www.qtsoftware.com/developer/tas ... y&id=87455 scheint das Problem zu beschreiben, aber bei mir tritt das Problem weiterhin auf.
In einem anderen Task (weiss leider nicht mehr welcher) wird empfohlen LazyChildCount einzuschalten. Aber auch das hat nichts gebracht.
Hat jemand vielleicht eine Lösung oder einen Workaround für dieses Problem gefunden?
Vielen Dank
Marcel
ich habe ein extrem nerviges Problem mit einem QDirModel, das durch einen QTreeView das komplette Dateisystem darstellt: die Initialisierung dauert nämlich (unter Windows), wenn nicht verfügbare Netzlaufwerke vorhanden sind, extrem lang.
Habe das Problem schon ziemlich lange (seit Qt 4.0) und mit jedem neuen Release vergeblich gehofft, dass das Problem endlich gelöst wird (auch mit der aktuellen Version 4.4 besteht es noch; 4.5 habe ich noch nicht probiert).
Die Bug-Meldung http://www.qtsoftware.com/developer/tas ... y&id=87455 scheint das Problem zu beschreiben, aber bei mir tritt das Problem weiterhin auf.
In einem anderen Task (weiss leider nicht mehr welcher) wird empfohlen LazyChildCount einzuschalten. Aber auch das hat nichts gebracht.
Hat jemand vielleicht eine Lösung oder einen Workaround für dieses Problem gefunden?
Vielen Dank
Marcel
Ich würde dir raten QFileSystemModel zu nutzen, das ist sozusagen eine Neuimplementation von QDirModel und es wird auch von den Trolls empfohlen dies einzusetzten, da es einiges besser machen soll und ua. Threads nutzt, also für dich auch an der Stelle hilfreich sein sollte.
Ich hatte mit QFileSystemModel trotz allem so meine Probleme und ich denke, das du dein Projekt gegebenenfalls leicht umbauen musst, aber gerade für die Zukunft wird sich das Nutzen der neuen Klasse sicherlich lohnen. Die Klasse gibt es auch erst seit Qt 4.4.
Ich hatte mit QFileSystemModel trotz allem so meine Probleme und ich denke, das du dein Projekt gegebenenfalls leicht umbauen musst, aber gerade für die Zukunft wird sich das Nutzen der neuen Klasse sicherlich lohnen. Die Klasse gibt es auch erst seit Qt 4.4.
Also mit QDirModel/QFileSystemModel habe ich auch schon rumprobiert; als Versuch für einen simplen Filemanager. Der erste Versuch mit 2 TreeViews zeigt aber bei beiden Models eine ziemlich schlechte Performance (unter Windows; Linux nicht getestet): Verzeichnisse mit viel Inhalt öffnen sich mit einer deutlichen Verzögerung, scrollen in einem solchen Verzeichnis ruckelt unerträglich.
Das mit den Netzwerklaufwerken konnte ich bei QDirModel auch beobachten, mit QFileSystemModel habe ich es seither nicht mehr probiert.
Das mit den Netzwerklaufwerken konnte ich bei QDirModel auch beobachten, mit QFileSystemModel habe ich es seither nicht mehr probiert.
Das kann ich so nicht bestätigen. Ich habe QDirModel sozusagen nachgebaut und auch am Anfang davon abgeleitet, da ich viel mehr Funktionalität brauche und es ist richtig, dass es bei großen Ordnern wie bspw mein System32 Ordner (hast du noch größere?) doch eine nervige Zeit zum Laden braucht. Aber Probleme beim Scrollen kann ich eigentlich nicht bestätigen, aber vielleicht habe ich auch mehr CPU Power
.
Ich habe mir auch schon überlegt, wohl von den vielen High Level Funktionen, wie die Benutzung von QDir zur Ordnersuche, runterzukommen. Das geht ja auch mit C++ Mitteln Plattformunabhängig.
Ich habe mir auch schon überlegt, wohl von den vielen High Level Funktionen, wie die Benutzung von QDir zur Ordnersuche, runterzukommen. Das geht ja auch mit C++ Mitteln Plattformunabhängig.
Code: Alles auswählen
#include <QApplication>
#include <QTreeView>
#include <QFileSystemModel>
#include <QVBoxLayout>
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QWidget window;
QTreeView* view = new QTreeView(&window);
QFileSystemModel* model = new QFileSystemModel(&window);
model->setRootPath("/");
view->setModel(model);
window.setLayout(new QVBoxLayout());
window.layout()->addWidget(view);
window.show();
return app.exec();
}
Wenn ich das gleiche mit z.b. pcmanfm oder thunar mache, ists kein Problem. Mit Dolphin ists in meinen Augen genauso träge.
Rechner: E6550 2.33GHz, 2GB, linux 2.6.27-11.
Mein Quadcore daheim sollte für solche Aufgaben denke ich auch "genug Power" haben, zumal das QFileSystemModel doch angeblich mit Threads arbeitet (wie auch immer selbige implementiert sind...)?
Naja, ich will nicht auf Qt rumhacken, wollte es nur an dieser Stelle erwähnt haben
Nein ist doch cool über sowas zu schreiben. Ich arbeite derzeit an einem Multi Plattform 7zip, wenn du so willst und dafür ist es wichtig, dass das öffnen des Programmes mit einem beliebigen Pfad oder auch dem ändern von ordnern zügig von statten geht.
Man müsste halt auch erst rausfinden, wo die Performanceprobleme liegen. Ist es wegen dem Laden der Icons (entfällt bei Linux eigentlich komplett), wegen dem Durchsuchen der Ordner oder wegen sonstigem.
Das befüllen der QDir strukturen, wo QDirModel sie dann erst wieder ausliest und dann selbst speichert brauchtb einfach sehr viel Zeit. Wobei das die von dir angesprochenen Verzögerungen beim Scrollen nicht beschreibt.
Ich habe unter Linux bisher noch nicht soviel getestet, werde ich bei gelegenheit mal tun
Man müsste halt auch erst rausfinden, wo die Performanceprobleme liegen. Ist es wegen dem Laden der Icons (entfällt bei Linux eigentlich komplett), wegen dem Durchsuchen der Ordner oder wegen sonstigem.
Das befüllen der QDir strukturen, wo QDirModel sie dann erst wieder ausliest und dann selbst speichert brauchtb einfach sehr viel Zeit. Wobei das die von dir angesprochenen Verzögerungen beim Scrollen nicht beschreibt.
Ich habe unter Linux bisher noch nicht soviel getestet, werde ich bei gelegenheit mal tun
Problem gelöst
Hallo,
also ich habe mein Programm nun auf das QFileSystemModel umgestellt und alles läuft auch mit nicht verfügbaren Netzlaufwerken rund.
Vielen Dank nochmal für den Hinweis
Marcel
also ich habe mein Programm nun auf das QFileSystemModel umgestellt und alles läuft auch mit nicht verfügbaren Netzlaufwerken rund.
Vielen Dank nochmal für den Hinweis
Marcel
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Jup richtig, geht nicht 
Ich war der Annahme FindFirstFile etc wären Teil des C++ Standarts oder eines Erweiterten. Dabei ist es Teil der Win32 API. Sorry für die Verwirrung. Ich tendiere dann eher dahin Boost zu verwenden, wobei ich da auch keine Informationen gefunden habe, ob es schneller sein sollte. Auf jeden Fall bietet es im Pfadmanagement mit der Rückgabe von Vektoren, die jeden Ordnernamen enthalten für meine Zwecke einiges mehr Flexibilität. Das wäre eine gute Neuerung für QDir. Eine neue Klasse QPath, die von absolutePath und weiteren zurückgegegeben wird, als Erweiterung zu QString. Das macht zwar erst einmal nichts schneller, kommt aber weiteren Verwendungen zugute.
Ich war der Annahme FindFirstFile etc wären Teil des C++ Standarts oder eines Erweiterten. Dabei ist es Teil der Win32 API. Sorry für die Verwirrung. Ich tendiere dann eher dahin Boost zu verwenden, wobei ich da auch keine Informationen gefunden habe, ob es schneller sein sollte. Auf jeden Fall bietet es im Pfadmanagement mit der Rückgabe von Vektoren, die jeden Ordnernamen enthalten für meine Zwecke einiges mehr Flexibilität. Das wäre eine gute Neuerung für QDir. Eine neue Klasse QPath, die von absolutePath und weiteren zurückgegegeben wird, als Erweiterung zu QString. Das macht zwar erst einmal nichts schneller, kommt aber weiteren Verwendungen zugute.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten: