注意:问题可能与此重复,仍然发布以获取有关此问题的更新。
我正在组件中创建多个(超过 1000k,不是在循环中而是在需要时)流文档对象,并且由于内存不足异常导致应用程序崩溃。使用 .NET 探查器后,我发现多个对象仍在记忆。
我创建了一个用于模拟的测试应用程序以获取详细信息。我发现这些对象在使用后就在内存中(WinDbg 帮助我识别了这一点)。简而言之,如果创建了 5000 个 FlowDocument 对象,即使在间隔 1 秒后调用 GC.Collect 后,我发现仍然为应用程序分配了 ~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;
}
}
如上所述,我也在 1 秒后调用 GC.Collect 以释放内存。如果我不调用 GC.Collect,大约 1.2 GB 内存会分配给应用程序。