Rhino memory management

I have a question about how Rhino manages its memory. I am working on batch grid generation for CFD, generating many meshes sequentially.

To prevent having to keep everything in memory, I run the algorithm as follows.
I have a large set of 3dm files that each contain a different set of surfaces for which a grid must be generated. At every iteration of the algorithm a file is opened, its geometry is read, a grid is generated and written to the file, after which it is closed.

I do find, however, during profiling of this algorithm that the memory footprint of Rhino increases to levels above 2 Gb (by looking in Task Manager to Memory/Private Working Set). Sporadically, however, it suddenly drops to “normal” levels, of let’s say 150 Mb.

My question is: is this expected behavior? Especially the sudden drop? Is that some sort of intermittent memory free operation in Rhino?

Note that I do not refer to .NET memory management. No matter how often I call GC.Collect() the memory footprint is not affected by this. Also, using CLR profiler I find that the .NET part of the memory use is constantly in the order of 100 Mb.

Those are good questions. Could the sudden drops be related to any timed action (e.g. autosave, etc)?

I wonder if there is geometry getting placed on the undo stack. Are you adding geometry to the Rhino document? Maybe try calling ClearUndoRecords.

No, i’m only reading data using file3dm.read, create many intermediate geometry objects, then write the final result to 3dm.