[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-optimize
Subject:    Re: QCString construction
From:       David Faure <dfaure () klaralvdalens-datakonsult ! se>
Date:       2007-02-10 11:32:55
Message-ID: 200702101233.13482.dfaure () klaralvdalens-datakonsult ! se
[Download RAW message or body]

On Saturday 10 February 2007, David Faure wrote:
> Here's a benchmark I wrote which proves how much we can gain (and it also proves
> that the resulting qcstring is correct ;)
> 
> Results on amd64 with -g3 and no optimization:
> QCString(char*) took 1582 milliseconds
> QCString(n)+memcpy took 134 milliseconds
> QCString()+setRawData took 31 milliseconds
> 
> Results on i686 with -O2:
> QCString(char*) took 2558 milliseconds
> QCString(n)+memcpy took 161 milliseconds
> QCString()+setRawData took 35 milliseconds

I forgot to attach the benchmark - in case someone spots an error, or an even better way to do it.

-- 
David Faure, faure@kde.org, dfaure@klaralvdalens-datakonsult.se
KDE/KOffice developer, Qt consultancy projects
Klarälvdalens Datakonsult AB, Platform-independent software solutions

["qcstring_perf.cpp" (text/x-c++src)]

#include <qcstring.h>
#include <stdio.h>
#include <assert.h>
#include <qdatetime.h>

int main()
{
   const int dataLength = 10000;
   char* charData = new char[dataLength];
   for ( uint i = 0; i < dataLength; ++i )
       charData[i] = 'A';
   charData[dataLength-1] = '\0';

   int numIterations = 100000;

   QTime time;
   time.start();

   for ( uint i = 0; i < numIterations; ++i ) {
       QCString cstr = charData;
       assert( cstr[0] == 'A' );
       assert( cstr[dataLength-1] == '\0' );
   }

   int elapsed = time.elapsed();
   qDebug( "QCString(char*) took %i milliseconds", time.elapsed() );

   time.restart();
   for ( uint i = 0; i < numIterations; ++i ) {
       QCString cstr(dataLength);
       memcpy( cstr.data(), charData, dataLength );
       assert( cstr[0] == 'A' );
       assert( cstr[dataLength-1] == '\0' );
   }
   qDebug( "QCString(n)+memcpy took %i milliseconds", time.elapsed() );

   time.restart();
   for ( uint i = 0; i < numIterations; ++i ) {
       QCString cstr;
       cstr.setRawData( charData, dataLength );
       assert( cstr[0] == 'A' );
       assert( cstr[dataLength-1] == '\0' );
       cstr.resetRawData( charData, dataLength );
   }
   qDebug( "QCString()+setRawData took %i milliseconds", time.elapsed() );

   return 0;
}


_______________________________________________
Kde-optimize mailing list
Kde-optimize@kde.org
https://mail.kde.org/mailman/listinfo/kde-optimize


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic