> > 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 > 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
