Jannik, A good starting point is wiki.squeak.org/squeak/4210 I am not an expert on this, but the profiler works by sampling from a high priority process that looks at what the "slow ones" happen to be doing at the time - it's random, but done enough times, a picture will emerge from it. In this case, you have not profiled creating a dictionary, you have profiled adding elements to a dictionary. If you want to see creating the dictionary, something like MessageTally spyOn:[ 1000 timesRepeat:[ Dictionary new. ]. ]. would be a better choice. If you want to see the effects of adding the elements, you might create the dictionary outside the block to remove it from the profile. Bill -----Original Message----- From: pharo-project-bounces@lists.gforge.inria.fr [mailto:pharo-project-bounces@lists.gforge.inria.fr] On Behalf Of Laval Jannik Sent: Saturday, October 24, 2009 12:21 AM To: Pharo-project@lists.gforge.inria.fr Subject: [Pharo-project] question about results of MessageTally Hi, when I use MassageTally>>spyOn: on the creation of a Dictionary, results have not the same details according to the size of Dictionary. For example: === |n| MessageTally spyOn:[ n := Dictionary new. 1 to: 400000 do:[:each | n at: each put:each]. ] === returns this results: ==== - 1745 tallies, 1751 msec. **Tree** -------------------------------- Process: (40s) 1964: nil -------------------------------- 45.8% {802ms} Dictionary(Set)>>atNewIndex:put: |43.6% {763ms} Dictionary(Set)>>fullCheck | |39.4% {690ms} Dictionary(Set)>>grow | | |27.2% {476ms} Dictionary>>noCheckAdd: | | | |25.2% {441ms} Dictionary(Set)>>findElementOrNil: | | | | |23.6% {413ms} Dictionary>>scanFor: | | | | |1.6% {28ms} primitives | | | |2.0% {35ms} primitives | | |9.2% {161ms} primitives | | |3.0% {53ms} Array(SequenceableCollection)>>do: | |2.4% {42ms} primitives | |1.8% {32ms} SmallInteger(Magnitude)>>max: |2.2% {39ms} primitives 22.4% {392ms} Association class>>key:value: |18.9% {331ms} Association class(LookupKey class)>>key: | |16.3% {285ms} Association(LookupKey)>>key: | |2.6% {46ms} primitives |1.9% {33ms} Association>>value: |1.6% {28ms} primitives 4.4% {77ms} Dictionary(Set)>>findElementOrNil: |2.3% {40ms} primitives |2.1% {37ms} Dictionary>>scanFor: 1.9% {33ms} primitives ==== But, if I do: === |n| MessageTally spyOn:[ n := Dictionary new. 1 to: 4000000 do:[:each | n at: each put:each]. ] === results are: ==== - 179772 tallies, 180312 msec. **Tree** -------------------------------- Process: (40s) 1964: nil -------------------------------- 3.1% {5590ms} Dictionary(Set)>>atNewIndex:put: |2.8% {5049ms} Dictionary(Set)>>fullCheck | 2.3% {4147ms} Dictionary(Set)>>grow | 1.3% {2344ms} Dictionary>>noCheckAdd: 1.0% {1803ms} Association class>>key:value: ==== Where are the rest of the process ? Does anybody understand this behavior ? can you explain ? Cheers, Jannik _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project