Collections 删除ironpython中的大对象,并立即释放内存?

Collections 删除ironpython中的大对象,并立即释放内存?,collections,ironpython,garbage,Collections,Ironpython,Garbage,我正在创建一个巨大的网格对象(大约900兆字节大小)。 一旦我分析完它,我想从记忆中删除它 我在stackoverflow.com上做了一些搜索,发现del只会删除提到的网格的引用。而不是网格对象本身。 一段时间后,网格对象最终会被垃圾收集 gc.collect()是否是我可以立即释放内存并以某种方式从内存中移除提到的大网格的唯一方法? 我在stackoverflow.com上找到了一些回复,其中指出应该避免使用gc.collect()(至少在涉及常规python时,而不是专门针对ironpyt

我正在创建一个巨大的网格对象(大约900兆字节大小)。 一旦我分析完它,我想从记忆中删除它

我在stackoverflow.com上做了一些搜索,发现
del
只会删除提到的网格的引用。而不是网格对象本身。 一段时间后,网格对象最终会被垃圾收集

gc.collect()
是否是我可以立即释放内存并以某种方式从内存中移除提到的大网格的唯一方法? 我在stackoverflow.com上找到了一些回复,其中指出应该避免使用
gc.collect()
(至少在涉及常规python时,而不是专门针对ironpython)。 我在这里还发现了关于stackoverflow的评论,这些评论声称,在IronPython中,如果没有其他东西保存引用,甚至不能保证内存会被释放

对所有这些问题有何评论

我使用的是ironpython 2.7版本


感谢您的回复。

在一般的托管环境中,如果对象不再存在引用(从根到对象本身的连接),请释放内存。要强制.net framework释放内存,垃圾收集器是您唯一的选择。一般来说,重要的是要知道,
GC.Collect
不会释放内存,它只搜索没有引用的对象,并将其放入对象队列中,这些对象将被释放。如果要释放同步内存,还需要
GC.WaitForPendingFinalizers

关于.net framework中的大型对象,需要知道的一件事是,它们分别存储在大型对象堆(LOH)中。从我的观点来看,释放这些对象synchron并不是坏事,你只需要知道,这会导致一些性能问题。这就是为什么GC通常会自行决定何时收集和释放内存,何时不收集和释放内存

因为
gc.collect
是在Python和IronPython中实现的,所以您应该能够使用它。如果您查看IronPython中的实现,
gc.collect
正是您想要的,请调用
gc.collect()
gc.WaitForPendingFinalizer
。所以在你的情况下,我会用它


希望这能有所帮助。

谢谢您的回复@BendEg。我不是程序员,所以让我看看我是否理解正确:您建议调用:
delmeshObject;gc.collect()
。并且不应调用
GC.WaitForPendingFinalizer
,因为ironpython将根据upper
GC.collect()
语句自动调用它。我理解对了吗?是的,你理解对了。如果必须立即同步释放内存,那么除了使用垃圾收集器之外,您没有其他选择。