C#学习教程:使用围绕对话框窗体的语句确保垃圾回收其中许多通过ShowDialog()方法临时显示为对话框。这个应用程序已经存在多年,我们发现由于表单或其使用的控件中的各种资源泄漏,许多表单没有被及时回收。具体来说,我们发现了未正确处理GDI+资源的示例,尽管可能存在尚未确定的其他类型的资源泄漏。虽然解决这个问题的正确方法显然是检查每一个表格和每一个控件并消除所有资源问题。这需要一些时间才能完成。作为短期替代方案,我们发现在表单上显式调用Dispose()似乎会启动垃圾收集过程,并且表单及其资源会立即被释放。我的问题是,将每个表单的ShowDialog()块包装在using语句中以便在显示表单后调用Dispose()是否是一种合理的解决方法,这也是一种好的做法吗?例如,更改现有代码:publicvoidShowMyForm(){MyFormmyForm=newMyForm();myForm.ShowDialog();}to:publicvoidShowMyForm(){using(MyFormmyForm=newMyForm()){myForm.ShowDialog();在我们的测试中,第一个示例从不调用MyForm的Dispose()方法,但第二个示例会立即调用它。当我们花时间追踪每个特定的资源问题时,这似乎是一种合理的短期修复方法吗?是否有我们可以考虑以其他方式识别和解决这些类型的资源问题的短期解决方案和/或方法?根据MSDN,您必须在使用ShowDialog显示的窗体上显式调用Dispose(与Show方法不同):当窗体显示为模态对话框时,单击关闭按钮(窗体右上角带有X的那个))导致隐藏窗体并将DialogResult属性设置为DialogResult.Cancel。与无模式窗体不同,当用户单击对话框的“关闭窗体”按钮或设置DialogResult属性的值时,.NETFramework不会调用Close方法。取而代之的是,表单是隐藏的,可以在不创建对话框的新实例的情况下再次显示。因为显示为对话框的窗体是隐藏的而不是关闭的,所以当您的应用程序不再需要该窗体时,您必须调用该窗体的Dispose方法。对于模态对话框,您应该使用以下模式:由于MyDialog派生自Form,而Form实现了IDisposable,因此模态将正确清理对话框。这不应该是“短期修复”,而是您应该为所有模态对话框调用的标准方法。无模式对话是另一回事。您需要自己跟踪它们,并在应用程序的适当位置调用Dispose。通常,对于实现IDisposable的对象,使用using语句是一种很好的方法。一个小样本情况:假设你有一个第三方“组件”。你不知道内部发生了什么,也许对象创建了一个临时文件并在Dispose上删除了文件。如果您不调用Dispose()并且不使用该文件,则该文件将永远不会被删除。在您的情况下,只要表单模式处于打开状态,您就可以执行相同的操作。以上就是C#学习教程:使用对话框形式周围的语句来保证垃圾回收的所有内容都是共享的。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表作品如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
