[Bug] JUCE 7.0.3: Slowdown in ValueTree::readFromStream

We just switched to the newest JUCE 7.0.3.

And we are seeing a slowdown in the function ValueTree::readFromStream(). That function lets you load a value tree from disk (through an input stream).

We have quite a large value tree we are loading during startup (to restore the state of our application). In JUCE 7.0.2. it took about 1 second to load the file. But in JUCE 7.0.3 it takes about 15 seconds. So JUCE 7.0.3 is about fifteen times slower. That’s a bit of a road block for us.

We did a bit of debugging and found the reason for the slowdown. It’s a change in MemoryOutputStream::writeFromInputStream, which is internally used by ValueTree::readFromStream(). There was a change made to the number of preallocated bytes:

I assume it allocates more bytes now? Because what I can see is that the destructor of MemoryOutputStream takes a lot longer to run in JUCE 7.0.3.

If I revert the change in MemoryOutputStream::writeFromInputStream then our slowdown is gone.

We were testing on the RELEASE version of our application. To make sure it’s not a debug only problem. (In debug the difference is actually less pronounced, but still noticeable.)

The test system was a Mac M1 Pro running macOs 12.6 and Xcode 13.4.1.

Bumping this thread, in hopes to get feedback from the JUCE team.

Thanks, that’s fixed here:

2 Likes

Thanks for fixing!