2010/3/11 Stéphane Ducasse <[email protected]>:
>
>>
>> So try it with randomized data:
>>
>> a := (1 to: 1000000) asArray shuffled.
>>
>> Smalltalk garbageCollect.
>> [ a collect: #yourself as: Set ] timeToRun. "==> 4143"
>>
>> Smalltalk garbageCollect.
>> [ a asSet ] timeToRun. "==> 3995".
>>
>> | s |
>> s := Set new.
>> Smalltalk garbageCollect.
>> [ s addAll: a ] timeToRun. "==> 157304 oops weak hashes".
>>
>> | s |
>> s := Set new: 1000000.
>> Smalltalk garbageCollect.
>> [ s addAll: a ] timeToRun. "==> 636".
>>
>>
>> With better hashes:
>
> levente how do you determine that you use better hashes below
>

SmallInteger are their own hash.
Code below produces random hashes with uniform density.

>
>> a := Set new: 1000000.
>> [ a size < 1000000 ] whileTrue: [
>>       a add: SmallInteger maxVal atRandom ].
>> a := a asArray.
>>
>> Smalltalk garbageCollect.
>> [ a collect: #yourself as: Set ] timeToRun. "==>  3895"
>>
>> Smalltalk garbageCollect.
>> [ a asSet ] timeToRun. "==>  3777".
>>
>> | s |
>> s := Set new.
>> Smalltalk garbageCollect.
>> [ s addAll: a ] timeToRun. "==> 4729 much better".
>>
>> | s |
>> s := Set new: 1000000.
>> Smalltalk garbageCollect.
>> [ s addAll: a ] timeToRun. "==> 774".
>>
>>
>> Conclusions:
>> - #collect:as: is (almost) as fast as #asSet
>> - better hashes can make a huge difference
>> - message sends cost a lot compared to bytecodes
>> - if you can guess the size of your collection, do it (applies for all 
>> growing collections and collection streaming)
> yes!!
>> - only optimize if you have to in your own code
>>
>>
>> Levente
>>
>>> --
>>> Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
>>> <[email protected]> <URL:http://www.stonehenge.com/merlyn/>
>>> Smalltalk/Perl/Unix consulting, Technical writing, Comedy, etc. etc.
>>> See http://methodsandmessages.vox.com/ for Smalltalk and Seaside discussion
>>>
>>> _______________________________________________
>>> Pharo-project mailing list
>>> [email protected]
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> [email protected]
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
>
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to