在内存饥饿的非托管功能之前调用GC.Collect?

时间:2013-08-14 06:33:06

标签: .net garbage-collection unmanaged

我的程序似乎生成了大量的垃圾,然后它调用了一个非托管的dll函数,它分配了大量的内存(~500 + MB)。非托管函数通常会因内存不足错误而失败。但是,如果我在调用非托管函数之前调用GC.Collect,它永远不会失败。

任务管理器显示内存使用单调上升,然后在GC.Collect调用时显着下降。没有那个电话,它会继续攀爬,直到它失败。

我读到的所有内容都说“除特殊情况外,不要使用GC.Collect”。这可能是这样吗?调用GC.Collect的唯一问题似乎是它可能很慢。我不在乎它是否缓慢所以这意味着它是无害的?

1 个答案:

答案 0 :(得分:2)

这听起来像是一个有效的情况,你可以拨打GC.Collect。您还可以尝试GC.AddMemoryPressure API,该API旨在告诉CLR您在流程中分配了大量非托管内存,并可能影响GC之前执行集合的决定。