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

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

        Marcus

Reply via email to