On Tue, Dec 19, 2017 at 7:40 AM, Andreas Brodbeck <dassi@mindclue.ch> wrote:
Am 18.12.17 um 20:45 schrieb Henrik-Nergaard:
> Hi Andreas,
>
> It looks like you may have problems with hash collisions
> FLLargeIdentityDictionary.
> What are the tally sizes of the FLLargeIdentityDicitonary used when you
> serialize? (If these have a tally larger than ~ 75% of the available size
> (4096 items), then there may well be some performance loss).

Well, hm, I have FLLargeIdentityDicitonary instances with up to 300'000
items... But that's what "large" means, right?

Is there anything I can do here? I don't think so.

>
> You could check if file writing is the problem by measuring the time it
> takes to only serialize in memory.
> You can try to use: "FLSerializer serializeToByteArray: " and see if it
> gives petter performance?

Thanks for this hint! I did that, and measured the same crazy
difference, 6minutes vs. 1.5 minutes.

So: It's not the storage! It's something inside Fuel. I keep
investigating and will update here.


Hi Andreas,��

Reading the thread nothing obvious comes to my mind. Sorry. My guy feeling is that some of the primitives used by FLLargeIdentityDicitonary become slower in latest VMs.��
I guess the main one to check is #fuelPointsTo:�� ��(primitive 132)�� (see the senders). Maybe you can do a quick test (isolated from your app) and compare agains old pharo ?

Another thing would be comparing your scenario using a identity set. Just save your image before doing this:

| set dict |
set := FLLargeIdentitySet.
dict :=��FLLargeIdentityDictionary.
Smalltalk at: #FLLargeIdentitySet put: IdentitySet.
Smalltalk at: #FLLargeIdentityDictionary��put: IdentityDictionary.

And re-run the serialization.


Anyway, cannot think of much more things now.��

Cheers,