在我的应用程序中,我有很多在运行时动态创建的RichTextBoxes。我意识到应用程序有一个内存泄漏,这是由RichTextBox控件引起的。为了证明,由于控制的内存泄漏我写了下面的测试方法:WPF RichTextBox内存泄漏
for (int i = 0; i < 3000; i++)
{
Control rich = new RichTextBox();
pnl.Content = rich;
}
GC.Collect();
GC.WaitForPendingFinalizers();
PNL是在XAML代码中声明一个ContentControl中。
如果您运行以下代码,则可以看到内存使用情况正在快速增长。
任何想法如何解决这个问题? 我曾考虑创建一个对象池,但这会使我的应用程序变得复杂,而我宁愿避免它。
编辑:我已经添加了调用垃圾收集器,以证明对象不被垃圾收集 - 没有在内存使用情况仍未改善,并没有调用GC收集方法。 请注意,在循环内调用rich.Dispose
可消除内存使用增长。
那你如何衡量内存? – 2009-10-26 16:01:43
您可以在Windows任务管理器中看到内存使用增长 – Elad 2009-10-26 16:07:08
这不限于RichTextBox。如果我在一个循环中运行代码,使用RichTextBox我会在大约一分钟内收到一个OutOfMemoryException异常 - 我的进程以32位进程的形式使用了所有2GB的可用空间。切换到一个普通的旧文本框,花了20分钟才能得到相同的异常。 – 2009-10-26 17:03:44