我在一个使用PDFViewer 组件 和大 PDF(>85Kb,可能会影响 LOH)的应用程序上工作,并且在集成它后我的应用程序中遇到了内存泄漏的问题。
除其他外,我认为 LOH 碎片和 GC 弱引用。它没有效果:
GC.Collect();
GC.WaitForFullGCComplete();
GC.Collect();
GC.WaitForFullGCComplete();
尽管它应该收集第 2 代的堆。
通过我检测到的分析器、性能监视器和进程浏览器,在(创建新的 PDFViewer)/(删除旧的 PDFViewer)的每次迭代中,我们都会增加相同的页面文件、虚拟内存和工作集。LOH 的大小也没有增加,但第 2 代堆大小正在增加。
我没有机会吸引外部帮助,因为我的应用程序又硬又大,但现在我在 PDFViewer 应用程序中发现了同样的问题,您可以在上面的链接下载。当我主动调整窗口大小时,内存在增加。当我打开其他 pdf 或重新打开当前 pdf 时,尽管打开 pdf 调用处理旧 pdf,但内存不会收集:
_pdfDoc.Dispose();
_pdfDoc = null;
GC.Collect()
也没有效果。
CLR拉了我的腿,我找了个理由摔断了整个头。