On Thu, May 12, 2022 at 3:19 PM Marcus Denker <[email protected]>
wrote:

>
>
> > On 12 May 2022, at 11:27, Andrei Chis <[email protected]>
> wrote:
> >
> > Hi,
> >
> > We were profiling the loading of code that uses many Traits. We saw
> something like this (this is a tally for
> `TraitedMetaclass>>#addAndClassifySelector:withMethod:inProtocol:`):
> > <Screenshot 2022-05-11 at 17.17.37.png>
> >
> > From what we saw in
> `TraitedMetaclass>>#addAndClassifySelector:withMethod:inProtocol:` a method
> is first added to `localMethodDict` and then it calls the super method that
> adds the selector to the `methodDict` of the actual class in
> `Behaviour>>addSelectorSilently:withMethod: `. Because of this we basically
> get an overhead as a method is added to two method dictionaries and adding
> a method to a MethodDictionary is slower, as it does operations like
> `flushCache` and `cachePragmas`.
> >
> > Should the `localMethodDict` also be an instance of MethodDictionary or
> could it be a simple dictionary?
> >
>
> I think it can be normal Dictionary: MethodDictionary we just meed where
> there VM executes code (for flushCache) and for lookup.
>

Ok. I can experiment with replacing it with a Dictionary and see how it
goes.


>
> The only downside is that it then uses a little bit more memory
> (MethodDictionary does not use associations), but that should be no problem.
>

Indeed that's an interesting aspect. Maybe more important for the Pharo
image is memory rather than loading speed.

Cheers,
Andrei


>
>         Marcus
>

Reply via email to