[英].NET WinForms application not releasing components?
我正在使用C#中的.NET 2.0 WinForms应用程序。
在删除应用程序期间,我发现了一些我认为很奇怪的东西。 设计器中生成的dispose方法:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
我看到一种情况,当components
确实包含某些项目时,它会传递disposing = false
参数。 这使我相信,由于components.Dispose();
未能正确处置/释放这些资源components.Dispose();
没有接到电话。 这是曾经想要的行为吗?
谢谢。
该disposing
参数将作为假传递,如果Dispose(bool)
正在从终结调用。 通常,这在未调用Dispose()
时发生。
Dispose(bool)
方法实际上不是IDisposable的一部分; IDisposable.Dispose()
和Object.Finalize()
都使用它。 约定是IDisposable.Dispose()
将调用Dispose(true)
而Object.Finalize()
将调用Dipose(false)
。
也许您的班级需要处置非托管资源,并因此实现终结器?
像这样:
~MyForm()
{
this.Dispose(false);
}
如果在完成过程中调用Dispose(false)
本身很好。 如果要完成Form,则包含的控件也将在完成队列中,并且在它们上调用Dispose()至少是多余的。
但是,事实是Form即将完成,这意味着没有在其上调用任何确定性的Dispose(),因此应单独对其进行研究。 如您声明的那样,除非在关闭应用程序时发生这种情况。 那就无害了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.