On Wed, 20 Oct 2010, Alexander Klenin wrote:

On Wed, Oct 20, 2010 at 01:45, Michael Van Canneyt
<mich...@freepascal.org> wrote:

If you need more convincing: the contnrs unit contains 2 hash classes.
one based on ansistrings, one with pchars and shortstrings. The pchar
version is easily 20% faster. It comes from the compiler code and was
written specially by Peter Vreman.

Try and improve that class with ansistrings. If you succeed, only then we
can start making a case for using them in the compiler.

Ok, I went ahead and have taken look at the code.
I assume you speak about TFPHashList vs TFPCustomHashTable.
The classes are not really comparable, because they use quite
different internal data structures.

But they perform the same function; hash on string with an
associated data structure.

So instead I converted TFPHashList list to use ansistrings.

That was the point :-)

Benchmarking included 3*10^6 calls to Add and Find methods
with the arguments of various lengths.

Average string length 5 characters:
ShortString: 1.15 s
AnsiString: 1.56 s

Average string length 45 characters:
ShortString: 12.0 s
AnsiString: 3.2 s

I agree that the first case is more relevant for the compiler,
but still you can see that ShortStrings are clearly not always faster.

I'm always open for benchmark tests.

Can you please send me your test and the implementation ?
I'd like to see when the balance shifts.

Recently I had an implementation for TStringList.Sort which the author claimed was 25-45 times (!) faster than the quicksort. I've never been able to reproduce his claim - rather the opposite. Not even with Delphi
(which, strangely enough, performed worse than FPC)

Michael.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to