[KDE-Devel] QString optimization using a Proxy class called
QStringTemp
Fred P.
fprog26 at hotmail.com
Sat Apr 24 00:46:07 CEST 2004
>On Thursday 22 of April 2004 00:28, Fred P. wrote:
>>For more information see:
>>http://kde-apps.org/content/show.php?content=12158&forumexplevel=2
>>
>>It should work on Qt2, Qt3 or higher, need small modification on QString
>>class:
>>
>>- QString(int buffer_length, bool dummy);
>>is currently private, you have to change it to public or protected.
>>
>>- You also have to put ~QString to be a virtual function.
>A bit strange requirement for something like QString. Why exactly, just
>because of a printf() ?
This is an "intensive" test case scenario.
I want to test the SPEED of QString/QStringTemp VS QString only.
To do this you perform the same operator+
operation MANY times on MANY different sizes
in a timed loop to know the difference.
The reasons why I do it 5000 times or more, is to see an "actual"
difference.
In fact, if you save even 1% in speed overall for all String operator+
without having to recode anything wouldn't that be great?
===========
For actual KDE scenario, I saw someone OPTIMIZING IMAP on KDE-CVS
and I tought that my patch for VCL and MFC could be easily ported to Qt.
http://members.shaw.ca/dkite/apr92004.html#oKde-Base
http://members.shaw.ca/dkite/apr22004.html#oKde-Base
More precisely:
"
Optimizations
George Staikos committed a change to kdebase/kioslave/imap4
11% reduction in malloc()s for dimap sync
14% reduction in strlen()s
result: approximately 7% less cpu
Diffs: 1, 2, 3, 4, 5, 6
George Staikos committed a change to kdebase/kioslave/imap4
another 10.5% faster yet (almost entirely due to eliminating malloc()s)
This could go faster but it would not preserve behaviour exactly, so I will
not risk it at this point. Someone who speaks IMAP must due the rest.
Diffs: 1, 2, 3
George Staikos committed a change to kdebase/kioslave/imap4
more imap optimizations. gives ~10% speed boost or so by removing excessive
buffer object creation and resizes, along with other object creation
Diffs: 1, 2, 3, 4, 5, 6, 7, 8
"
A similar patch could be made for QCString or similar.
>>
>>===============
>>
>>Improve speed performance of QString
>>while keeping the syntax readable as is.
>>
>>e.g.
>>QStringTemp tmp( 4096 );
>>QString s = tmp + a + b + c + d;
>>
>>OR
>>
>>uint sz = a::length() + b::length() + c::length() + d::length();
>>QStringTemp tmp( sz );
>>QString s = tmp + a + b + c + d;
>>
>>Another way is to modify the
>>QString::operator+
>>to use QStringTemp implicitely.
>>
>>Performance increase from few ms to 4x faster depending on the buffer size
>>and the size of each string.
>>
>>See test cases screenshots
>>for various buffer size algorithms.
>Do you have any more real-world examples? Concatenating thousands of 6000
>chars long strings is probably not a very common scenario, and in cases
>where performance of this could matter there's IMHO not a big difference
>between explicitly using QStringTemp and QString::operator+=.
There's a big difference, it's easier to read and people wouldn't even have
to bother
if the algorithm is tweaked properly, so it can anticipate.
>>
>>The Qt version of this code may be released under the GPL/QPL, if needed.
>That's not sufficient for Qt actually, all code for Qt needs to have
>copyright assigned to TrollTech (because of the commercial versions).
I will approach TrollTech when it will be needed. License issues can be
resolved,
the thing is as long as the other version of this patch for others
non-commercial
and commercial String libraries are kept LGPL, BSD or public domain.
IMHO, I don't think MFC would accept a GPL/QPL patch, neither does Borland.
>Also, that 400+k archive is not the best way how to distribute one 6k .h
>file and 2k readme file. Distribute it either as your files + diff or just
>a diff (something like diff -u -p -d -N -r dir.old dir.new > dir.patch).
I will try that, later. =)
Sincerely yours,
Fred.
>--
>Lubos Lunak
>KDE developer
>---------------------------------------------------------------------
>SuSE CR, s.r.o. e-mail: l.lunak at suse.cz , l.lunak at kde.org
>Drahobejlova 27 tel: +420 2 9654 2373
>190 00 Praha 9 fax: +420 2 9654 2374
>Czech Republic http://www.suse.cz/
>_______________________________________________
>Kde-optimize mailing list
>Kde-optimize at kde.org
>https://mail.kde.org/mailman/listinfo/kde-optimize
_________________________________________________________________
MSN Premium helps eliminate e-mail viruses. Get 2 months FREE*
http://join.msn.com/?pgmarket=en-ca&page=byoa/prem&xAPID=1994&DI=1034&SU=http://hotmail.com/enca&HL=Market_MSNIS_Taglines
More information about the Kde-optimize
mailing list