We are seeing what looks like a sub-linear memory growth from progressive calls to iBuffer::getMetadata(). Is this expected and how do we avoid it?
An outline of our code is as follows:
- A fixed number of calls to IBufferOutputStream::createBuffer
- A loop of
IBufferOutputStream::acquireBuffer, Argus::interface_cast<Argus::IBuffer>, IBuffer::getMetadata, IBufferOutputStream::releaseBuffer
First, thank you for the report of still-living, leaked objects that Argus produces when the process exits. If we release the IBuffer objects, there are no leaks reported. But, if we intentionally do not release them, there is an interesting progression of live objects over time:
- After 100 frames captured, 60-70 objects are live.
- After 1,000 frames, 100-200 objects.
- After 10,000 frames, 250-300.
- After 100,000 frames, roughly 500 live objects.
I would expect the object count to be roughly solid-state after the first few frames. If we do not call getMetadata, the object count does not increase. How do we access metadata without the memory growth?