c# – 垃圾收集运行得太晚 – 导致OutOfMemory异常

想知道是否有人可以对此有所了解.

我有一个具有大内存占用(和内存流失)的应用程序.没有任何内存泄漏,GC往往可以很好地释放资源.

但是,偶尔GC不会“按时”发生,导致内存不足异常.我想知道是否有人可以对此有所了解?

我已经使用了REDGate分析器,这非常好 – 应用程序具有典型的“锯齿”模式 – OOM发生在锯齿的顶部.遗憾的是,无法使用分析器(AFAIK)来识别内存流失源.

是否可以设置内存“软限制”,应该强制使用GC?目前,GC只在内存处于绝对限制时执行,从而产生OOM.

最佳答案 垃圾收集不应该“及时发生”.当新的内存分配将Gen-0推到一定限度时,就会发生这种情况.因此,它们总是在内存分配将内存超过其限制之前发生.这种情况每天发生在世界各地很多次,如果有任何漏洞并不为人所知,我会感到惊讶.

您是否认为实际上可能会分配比可用内存更多的内存?操作系统只允许您在大多数32位计算机上访问2GB.

还有其他一些可能性:

>您的应用程序是否使用未管理的内存?
>您的应用程序是否固定任何内存?如果是这样,可能会导致碎片问题,特别是如果您没有释放pin.

点赞