2010/3/11 Stéphane Ducasse <stephane.ducasse@inria.fr>:
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 <merlyn@stonehenge.com> <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 Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project