我有一个应用程序,我根据情况动态创建用户控件。当我完成它们后,我将它们从容器中移除,但它们仍在占用记忆。
我在代码中实现了一个“dispose”方法来清除用户控件内部的控件,但我仍然觉得有更好的方法可以做到。
我不确定我可以发布什么代码,因为没有代码真正相关。
我真正拥有的就是我现在使用的处理方法
public void Dispose()
{
ContentWebView.NavigateToString("about:blank");
YoutubeMediaPlayer.Stop();
}
答案 0 :(得分:2)
Dispose
方法用于释放非托管资源。
当删除对对象的所有引用时,垃圾收集器最终将“收集”它(释放内存)。你实际上无法控制何时发生这种情况,即使调用GC.Collect
在技术上只是一个建议。但是,您可以直接调用对象上的dispose(请注意,如果它仍在使用中,这可能会导致奇怪的行为或异常!)
如果您怀疑控件具有需要清理的非托管资源,则应在完成后直接调用Dispose
(GDI Bitmap对象需要像这样清理)。根据你的评论,听起来你只需要垃圾收集器来实际释放内存,这是很难控制的(你可以尝试调用GC.Collect
)。
MSDN for Dispose:http://msdn.microsoft.com/en-us/library/system.idisposable.aspx