QML ListView memory performance
-
Hi all,
in my application (Qt 5.4.2 / QtQuick 2.4), I use ListView to display a more or less big list of items (about 2K elements).
The ListView items are loaded with usage of model and delegate.
The model is implemented in C++ (based on QAbstractListModel), and works fine.
I also have implemented a QSortFilterProxyModel to add some filtering/sorting functions.In fact, the ListView can only display 5 elements on the screen and I have to scroll to see all the elements.
In my delegate Component, I have added traces in Component.onCompleted and Component.onDestruction to follow to loading/destruction of each list item.
I am surprised to see that all the items from my model are first loaded (2134 elements!!!) and then, when the ListView is displayed, the most of the are distroyed (about 2100 elements!!!).Then when I move the scrollbar, I can see in debug log then elements are loaded/destroyed according to my position in the list.
The loading of the full list, followed by the destruction of 90% of those elements is are very time and memory consuming issue.
Is there a workaround for this?
Have I missed something in my ListView initialization?
Here some extract from my QML itemItem { id: root property alias model: tourList.model property Component tourListDelegate: TourListDelegate {} property bool enabledChacheBuffer: true .... ScrollBar { id: scrollBars ... ListView { id: tourList cacheBuffer: enabledChacheBuffer ? (height > 0 ? Math.min(height * 4, appSize.height * 1.5) : 0) : 0 signal newCurrentIndex(int index) highlightMoveDuration: 300 boundsBehavior: Flickable.StopAtBounds currentIndex: -1 clip: false delegate: tourListDelegate onCurrentIndexChanged: { // When selecting element from list, ensure full element is visible positionViewAtIndex(currentIndex, ListView.Contain) } } } }
Regards,
Fabrice