从内存中删除流程文档对象

本文关键字:文档 对象 程文档 内存 删除 | 更新日期: 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;
    }
}