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
