[PATCH] KFileItem performance improvement
Peter Penz
peter.penz at gmx.at
Thu Jun 26 19:56:28 BST 2008
Hi,
When opening a directory with several hundreds or thousands of items and
turning on previews in Dolphin/Konqueror, the layout of items can get quite
slow when using the icon view.
Explanation:
Each time an icon gets exchanged by the preview image, a KDirModel::setData()
is invoked which sends the signal 'dataChanged()'. This signal is received by
QListView. Now QListView asks the KFileItemDelegate for the sizeHint() of
each (!) item to do a relayout [1].
KFileItemDelegate::sizeHint() is not trivial, as it is tries to keep a minimal
width for the item. 50 % of the performance is spend in
KFileItemDelegate::initStyleOption, there 82 % are spend for getting the icon
from the model. From there 85 % are spend for getting the icon name of
KFileItem (the expensive part there is the MIME type block). This means in
summary 35 % of the runtime in KFileItemDelegate::sizeHint() is spend in
KFileItem::iconName().
I checked how often KFileItem::iconName() is invoked on the same instance of
KFileItem when showing a directory with 800 items and turning on previews.
Result: in average KFileItem::iconName() is invoked around 300 times in
average for each (!) KFileItem instance.
Attached is a patch which remembers the icon name after KFileItem::iconName()
is invoked at least once.
Is it OK to commit this patch?
Peter
[1] we could bypass this issue a little bit by turning on the uniformItemSizes
property of QListView and by changing the previews block by block, but a
relayout without uniformItemSizes must be done afterwards. This relayout can
still take up to 1 second when having a directory with 10000 items (runtime
complexity O(n*n)) on a 2,1 GHz CPU...
-------------- next part --------------
A non-text attachment was scrubbed...
Name: kfileitem.patch
Type: text/x-diff
Size: 1824 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20080626/b441fdad/attachment.patch>
More information about the kde-core-devel
mailing list