我目前正在尝试处理释放 FlowDocument 资源的问题。我正在加载一个 rtf 文件并将其放入带有 TextRange.Load 的 FlowDocument 中。我注意到,在它这样做之后,它会保留这些资源,而 GC 不会收集它。我运行了一个内存分析器,并且发现这是真的。我还将范围缩小到我是否加载实际将 rtf 放入 FlowDocument 中。如果我不这样做,那么一切都很好。所以我知道这是问题所在。
我希望对如何解决这个问题有一些指导。这是加载 rtf 和所有内容的代码。我已将所有其他代码注释掉,甚至将其放在自己的范围内,并尝试了 GC.Collect()。任何帮助是极大的赞赏。
编辑:这是我目前的完整代码。除了让它运行的基本必需品外,我已经取出了其他所有东西。问题仍然存在。如您所见,FlowDocument 和 TextRange 没有在其他任何地方引用。
public LoadRTFWindow(string file)
{
InitializeComponent();
using (FileStream reader = new FileStream(file, FileMode.Open))
{
FlowDocument doc = new FlowDocument();
TextRange range = new TextRange(doc.ContentStart, doc.ContentEnd);
range.Load(reader, System.Windows.DataFormats.Rtf);
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
我找到了这篇文章,我希望它可以帮助我解决我的问题,但我没有运气。非常感谢任何类型的帮助。谢谢你。
编辑:我想我应该提到我检查这个的主要方式。我打开了 Windows 任务管理器,正在查看我的应用程序进程正在使用的内存使用情况。当我运行上面的代码时,应用程序在执行 TextRange.Load()(这是一个 400 页的大 RTF)时从 40,000K 变为 70,000K,一旦完成,它就会下降到 61,000K 并保持在那里。我的期望是它会回落到 40,000K 或至少非常接近它。
正如我之前提到的,我使用了一个内存分析器,发现有很多段落,Run..ect。之后对象仍然活着。