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: [email protected] 
[mailto:[email protected]] On Behalf Of Laval Jannik
Sent: Saturday, October 24, 2009 12:21 AM
To: [email protected]
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
[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