我们有一个包含数千个表单的 Windows 窗体应用程序。
其中许多通过 ShowDialog() 方法临时显示为对话框。
这个应用程序已经存在多年,我们发现由于表单或它使用的控件中的各种资源泄漏,许多表单没有及时收集垃圾。
具体来说,我们发现了 GDI+ 资源没有被正确处理的例子,尽管可能还有其他类型的资源泄漏尚未被描述。
虽然解决这个问题的正确方法显然是遍历每一个表单和每一个控件,并消除所有的资源问题。这需要一些时间来完成。
作为短期替代方案,我们发现在表单上显式调用 Dispose() 似乎会启动垃圾收集过程,并且会立即释放表单及其资源。
我的问题是,将每个表单的 ShowDialog() 块包装在 using 语句中,以便在显示表单后调用 Dispose() 是否是一种合理的解决方法,这也是一个普遍的好习惯吗?
例如,从这里更改现有代码:
public void ShowMyForm()
{
MyForm myForm = new MyForm();
myForm.ShowDialog();
}
对此:
public void ShowMyForm()
{
using (MyForm myForm = new MyForm())
{
myForm.ShowDialog();
}
}
在我们的测试中,MyForm 的 Dispose() 方法永远不会为第一个示例调用,但它会立即为第二个示例调用。
当我们花时间跟踪每个特定的资源问题时,这似乎是一种合理的短期解决方法吗?
是否有其他我们可以考虑的短期解决方法和/或用于识别和解决这些类型的资源问题的方法?