如何释放内存(用户控制)

时间:2009-01-28 07:38:24

标签: c# wpf

我正在使用WPF。

在运行时动态添加用户控件后,如何处理该用户控件。 因为没有用户控件的Dispose方法。我不想等到Garbage Collecter跑。

4 个答案:

答案 0 :(得分:4)

即使您能够处置它,也不会释放内存。 Dispose不是关于释放内存 - 它是关于释放非内存资源(例如GDI句柄)。我假设如果该类没有实现IDisposable,它就没有任何非内存资源可以释放。

答案 1 :(得分:3)

我认为你的设计存在缺陷。 如果你仍然有一些东西的参考,那么你不应该尝试释放内存。 一旦某些东西实际上不再存在(没有进一步的引用),它就是有效的可用内存,下次当你需要一些没有GC时无法提供的内存时,它将变为空闲[1]并且可用。

你的设计并没有浪费记忆,只是翻腾记忆。这本身可能有问题,但它不会浪费记忆。如果你的设计持有 之后的控件,则不再需要它们来浪费内存,但是你不能通过“删除”来解决问题。你需要解决传递这些控件的根本原因,使得生命周期难以控制。

[1]禁止在此处不适用的终结者

答案 2 :(得分:0)

您是否有理由不想等待GC?如果你从它的父节点中删除控件,所以没有对它的引用,那么GC会吃掉它,不需要手动处理它。

答案 3 :(得分:0)

谢谢史蒂夫。

首先,我经常在我的应用程序中添加许多UsrCtr元素。所以,如果不立即将它们移除,那将浪费巨大的记忆。

实际上我在几个地方使用ForEach循环来迭代Application(WinForm)上的所有元素,所以这个循环仍然显示UserCtrs(将UserCtr删除为chld之后)

此外,我还通过自定义事件和委托将UserCtrs的引用传递给我项目中的其他几个位置。因此,如果将其添加到主表单上的一个位置,仍然可能存在用户控件的参考存在于项目中的其他位置。