从内存中删除流程文档对象
本文关键字:文档 对象 程文档 内存 删除 | 更新日期: 2023-09-27 17:55:00
注意:问题可能是这个的副本,仍然发布它以获得这个问题的更新。
我在组件中创建多个(超过1000k,不是在循环中,而是在需要时)流文档对象,并且应用程序由于内存不足异常而崩溃。在使用。net分析器后,我发现多个对象仍然在内存中。
我创建了一个模拟测试应用程序来获取细节。我发现对象在使用后是在内存中(WinDbg帮助我识别了这一点)。简而言之,如果创建了5000个FlowDocument对象,即使在调用GC之后。收集间隔1秒后,我发现仍然为应用程序分配了~600MB。内存只有在关闭应用程序后才会被释放。
有没有人找到解决方案来清除分配给FlowDocument的内存?
代码如下
private void CreateObjects()
{
for (int index = 0; index < 5000; index++)
{
FlowDocument fd = new FlowDocument();
//Opacity is accessed just to use any property of object. It does not have any significance.
var ff = fd.Foreground.Opacity;
}
}
如上所述,我也调用了GC。1秒后收集以释放内存。如果我不打电话给GC。收集,大约1.2 GB的内存分配给应用程序。
在问题中,您已经声明您使用WinDbg
。使用WinDbg
,您可以找到这些对象的引用,并尝试在代码中删除它们。参考诊断.net内存泄漏
另外,流程文档对象或流程文档对象的属性可能正在使用非托管资源,通过实现IDisposable
接口释放非托管资源;要获得进一步的建议,您需要共享代码。
尽量不要在每个循环中分配变量
private void CreateObjects()
{
FlowDocument fd;
for (int index = 0; index < 5000; index++)
{
fd = new FlowDocument();
//Opacity is accessed just to use any property of object. It does not have any significance.
var ff = fd.Foreground.Opacity;
}
}