I experience what I suppose is a memory leak in InstanceObject.GetSubObjects()
.
Below is a minimal example that should show this. If I do manually what I assume is happening more or less under the hood, it does not leak (see second loop).
protected override Result RunCommand(RhinoDoc doc, RunMode mode)
{
if (RhinoGet.GetOneObject("Get block", true, ObjectType.InstanceReference, out var objRef) != Result.Success ||
!(objRef.Object() is InstanceObject instanceObject))
{
return Result.Failure;
}
// This leaks (loop to see the leak clearly)
for (int i = 0; i < 100; i++)
{
var leakingObjects = instanceObject.GetSubObjects();
}
// This does not leak
for (int i = 0; i < 100; i++)
{
var nonleakingObjects = instanceObject.InstanceDefinition.GetObjects();
var transform = instanceObject.InstanceXform;
foreach (var rhinoObject in nonleakingObjects)
{
rhinoObject.Geometry.Transform(transform);
}
}
return Result.Success;
}