----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: http://git.reviewboard.kde.org/r/113591/#review43914 -----------------------------------------------------------
This review has been submitted with commit 6d8fac9e342cfbcafb20846e647f25696d67da57 by Frank Reininghaus to branch master. - Commit Hook On Nov. 3, 2013, 6:57 p.m., Frank Reininghaus wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > http://git.reviewboard.kde.org/r/113591/ > ----------------------------------------------------------- > > (Updated Nov. 3, 2013, 6:57 p.m.) > > > Review request for kdelibs and David Faure. > > > Repository: kdelibs > > > Description > ------- > > This patch is a subset of https://git.reviewboard.kde.org/r/113355/ (I'll > continue working on the other part of that request, which can be dealt with > separately, at some later point). > > It adds a unit test to makes sure that saving UDSEntries to a QDataStream and > re-loading them works as expected, and makes use of implicit sharing of > QStrings in UDSEntryPrivate::load(QDataStream &s, UDSEntry &a) to reduce the > memory usage of this class (which is the major consumer of memory in Dolphin > and other applications that list the contents of large directory contents > with KIO). > > It caches the most recently loaded QString for each UDS field in a simple > QVector<QString>. This works because sharable strings like, e.g., the user > and the group, usually appear at the same position in the QDataStream when > retrieving a large number of UDSEntries that have been stored by a kioslave. > > Note that I had made an earlier attempt to achieve the same thing using a > QHash<uint, QString> to look up the cached strings ( > http://pastebin.kde.org/p52a24b49 ), but the QVector<QString>-based solution > turns out to be faster. > > > Diffs > ----- > > kio/tests/udsentrytest.h PRE-CREATION > kio/tests/udsentrytest.cpp PRE-CREATION > kio/tests/CMakeLists.txt 5a1f9b5 > kio/kio/udsentry.cpp 1e1f503 > > Diff: http://git.reviewboard.kde.org/r/113591/diff/ > > > Testing > ------- > > kdelibs unit tests still pass. The memory usage of both Dolphin and a simple > test program that uses KIO::listDir to list the contents of a large directory > (see r4 of https://git.reviewboard.kde.org/r/113355/) is reduced by ~128 > bytes per item according to my tests. > > A simple benchmark that simulates how 100,000 UDSEntries stored by kio_file > are loaded (see r3 of https://git.reviewboard.kde.org/r/113355/) runs in 234 > ms instead of 266 ms on my machine - it seems that growing the heap to > provide space for the non-shared QStrings is more expensive than comparing > all loaded QStrings with the cached values. > > > Thanks, > > Frank Reininghaus > >