QML ListView Performance



  • Hallo zusammen,

    ich bin recht neu in dem Thema und habe direkt mal eine Frage.
    Ich besorge mir aus meiner Datenbank ca. 15000 Datensätze und lasse sie mir aneigen. So weit so gut. Gekapselt ist die ListView in einer ScrollView. Wenn ich nun durch scrollen möchte, dann hakt das so unfassbar, dass es komplett unbrauchbar ist. Gibt es Möglichkeiten das zu optimieren?

    P.S.: Bei den Daten handelt es sich lediglich um 2 Spalten mit max. 250 Zeichen Textlänge pro Spalte. In der Regel aber nicht mehr als 30/Spalte



  • Die Beschreibung ist etwas vage. Warum steckt eine ListView in einer ScrollView? Ich bin zwar ein QML Ignorant und weiß nicht genau, wie das alles funktioniert, aber es würde mich etwas überraschen, wenn eine ListView nicht von sich aus scrollbar wäre.
    Die Frage wäre vor allem, wie du die Daten holst. Wenn beim Scrollen erst auf die Datenbank zugegriffen wird, dann ist das schon das Problem.



  • Moin und danke für die Antwort.
    Ich selbst komme aus der WPF und XAML Welt und ich finde es jetzt auch nicht verwunderlich wenn ich einen ScrollViewer drum herum bauen müsste. Also ansich ist die Listview natürlich scrollable aber es wird eben nicht der übliche Balken an der Seite angezeigt. Das habe ich mir aber eben mit diesen Container dazu geholt.
    Also das Besorgen der Daten dauert natürlich schon einen Moment aber das habe ich natürlich schon raus gerechnet. Es geht wirklich nur um das rendern. Ich habe schon so Features wie antialiasing und so einen Kram ausgeschaltet. Das brachte einen deutlichen schub aber eben nicht das non plus ultra. Ich bin mit der hohen Erwartung aus der.net Welt gekommen dass die Performance bei qt deutlich besser ist. Aber momentan... Naja... Bin ich noch etwas enttäuscht.

    Aber ich muss zugeben, dass ich wirklich komplett neu in dem Thema bin. Generell scheint mir doch qml das Gegenstück zu xaml zu sein oder?

    Würdest du mir verraten, weshalb du dich scheinbar bewusst, von qml fern hältst? Ich bin noch in der Findungsphase und schwanke zwischen qt und HTML5.


  • Mod

    Interessant, aber ich hab lange nichts mehr mit QML gemacht.

    Aber es scheint eine cacheBuffer Property zu geben, die man setzen kann:
    http://qt-project.org/wiki/Performance_tip_Lists



  • Secondsun schrieb:

    Würdest du mir verraten, weshalb du dich scheinbar bewusst, von qml fern hältst?

    Ich will und brauche das einfach nicht 😉 Das ist vielleicht am ehesten für kleinere mobile Anwendungen geeignet. Aber ansonsten seh ich keine Vorteile in dem Konzept. Ich schreib auch so gut wie nie so einfache GUIs, bei denen es reichen würde. Die Erstellung und Anordnung der Elemente ist eh fast immer das kleinste Problem. Dann schreibt man aber sehr viele Delegates, muss seine Daten aufbereiten, muss sich um die Performance kümmern usw. Das ist viel größerer Aufwand, als zu definieren, dass man irgendwo eine ListView haben will und paar Eigenschaften von der zu setzen. Und ich will da auch nicht unbedingt zig verschiedene Sprachen für sowas haben und die Logik über zig Stellen verteilen.



  • Ich habe eine QistView (model/view concept) in QT ohne QML implementiert und habe Listen von 500.000+ Elementen und da lagt überhaupt nichts.

    Ich kann es Dir nur von der QListView sagen, aber die kümmert sich selbst ums scrollen und um den Scrollbalken.

    Wie sieht denn dein Datenmodell aus?
    Zum rendern greift die QListView nämlich immer über die data() Funktion auf dein Modell zu und wenn sich dieses Modell nicht InMemory befindet dann ist das ein Performance Killer.

    Wenn du mit der Maus langsam von links und rechts über ein Listenelement fährst wird die data() Funktion über 200 mal aufgerufen. Wenn das in deinem Modell jedesmal ein Datenbankabruf verursacht dann wäre das ein ziemliches Problem.


Anmelden zum Antworten