oKcerG / SortFilterProxyModel

A nicely exposed QSortFilterProxyModel for QML
MIT License
298 stars 101 forks source link

Performance is not great when using a very large list - 10k+ items #61

Open kastravec opened 5 years ago

kastravec commented 5 years ago

When using it on a large model, let's say starting from 10k items and more then the performance is not great. If the number of items is larger then 20k then the problem becomes significantly noticeable.

SortFilterProxyModel {
    id: proxyModel

    filters: AnyOf {
        RegExpFilter {
            roleName: "role1"
            pattern: searchInput
            caseSensitivity: Qt.CaseInsensitive
        }
        RegExpFilter {
            roleName: "role2"
            pattern: searchInput
            caseSensitivity: Qt.CaseInsensitive
        }
    }
    sorters: RoleSorter {
        roleName: "role2"
        sortOrder: Qt.AscendingOrder
    }
}

Above is a snippet of how I'm using it. Great work and API overall.

Cheers, Petref

kastravec commented 5 years ago

This is the complete code.

SortFilterProxyModel {
        id: proxyModel
        sourceModel: IEXSymbolsModel
        filters: [ AnyOf {
                RegExpFilter {
                    roleName: "role1"
                    pattern: searchInputLabel.text
                    caseSensitivity: Qt.CaseInsensitive
                }

                RegExpFilter {
                    roleName: "role2"
                    pattern: searchInputLabel.text
                    caseSensitivity: Qt.CaseInsensitive
                }
            },

            ValueFilter {
                enabled: checkbox0.checked
                roleName: "role3"
                value: 1
            },

            ValueFilter {
                enabled: checkbox1.checked
                roleName: "role3"
                value: 2
            },

            ValueFilter {
                enabled: checkbox2.checked
                roleName: "role3"
                value: 3
            },

            ValueFilter {
                enabled: checkbox3.checked
                roleName: "role3"
                value: 4
            },

            ValueFilter {
                enabled: checkbox4.checked
                roleName: "role4"
                value: 5
            }
        ]
    }
oKcerG commented 5 years ago

Hello, What performance is not great? Are we only talking about filtering the data when a filter changes?

Can you try if 770789e improve your situation?

Do multiple filters change at once in your use case or are they only changed one by one in the ui?