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,