<div dir="ltr"><div><div><div><div><div><div><div><div><div><div>Hi all,<br><br></div>Before loading a new dataset into our app, I'd like to remove all existing volumes from the renderer, which I believe should lead to them being destroyed as well, since I have no other references to the volumes (currently).<br><br></div>What I tried was<br><br>    // Remove all existing volumes<br>    auto volumes = renderer()->GetVolumes();<br>    volumes->InitTraversal();<br>    for (int i = 0; i < volumes->GetNumberOfItems(); ++i) {<br>        qDebug() << "removing volume";<br>        vtkSmartPointer<vtkVolume> volume = volumes->GetNextVolume();<br>        qDebug() << "before:" << volume->GetReferenceCount();<br>        renderer()->RemoveVolume(volume.GetPointer());<br>        qDebug() << "after:" << volume->GetReferenceCount();<br>    }<br><br></div>The output I get each time I load a new dataset (actually the same, but doing it repeatedly) and execution passes by this cleanup code is:<br><br>removing volume<br>before: 3<br>after: 1<br>removing volume<br>before: 3<br>after: 1<br>removing volume<br>before: 3<br>after: 1<br><br></div>Which sort of makes sense to me: Apparently the renderer holds two references to the volume, since the refcount goes down by 2 when I remove the volume from the renderer. The remaining reference is held by the vtkSmartPointer I created inside the loop.<br><br></div>But, what surprises me is that memory usage does not seem to go down when this code is executed. I would expect that when the scope of the for loop body is exited, the refcount will drop to zero, so the volume should be deleted. And I guess it probably is.<br><br></div>But looking at the memory usage when repeatedly loading datasets (and thus clearing the previous), the resident memory used by the app accumulates.<br><br></div>Must I somehow remove the mapper / underlying image data as well? I'm not holding any references to these, so I would have expected them to die along with the volume.<br><br></div>Helpful for any tips on why this cleanup is apparently not enough to avoid memory accumulation.<br><br></div>Thanks,<br></div>Elvis<br></div>