gpt4 book ai didi

c# - 使用围绕对话框形式的语句来确保垃圾收集

转载 作者:太空狗 更新时间:2023-10-29 18:16:43 25 4
gpt4 key购买 nike

我们有一个包含数千个表单的 Windows 窗体应用程序。

其中许多通过 ShowDialog() 方法临时显示为对话框。

此应用程序已经存在多年,我们发现由于表单或其使用的控件中的各种资源泄漏,许多表单没有及时进行垃圾回收。

具体而言,我们发现了未正确处理 GDI+ 资源的示例,尽管可能存在尚未确定特征的其他类型的资源泄漏。

虽然解决这个问题的正确方法显然是检查每个表单和每个控件并消除所有资源问题。这需要一些时间才能完成。

作为短期替代方案,我们发现在表单上显式调用 Dispose() 似乎会启动垃圾收集过程,并且表单及其资源会立即释放。

我的问题是,将每个表单的 ShowDialog() block 包装在 using 语句中,以便在显示表单后调用 Dispose() 是否是一个合理的解决方法,这也是一个很好的实践一般?

例如,将现有代码更改为:

public void ShowMyForm()
{
MyForm myForm = new MyForm();
myForm.ShowDialog();
}

对此:

public void ShowMyForm()
{
using (MyForm myForm = new MyForm())
{
myForm.ShowDialog();
}
}

在我们的测试中,第一个示例从未调用 MyForm 的 Dispose() 方法,但第二个示例会立即调用它。

在我们花时间追踪每个特定资源问题的同时,这是否是一种合理的短期解决方法?

我们是否可以考虑其他方法作为短期解决方法和/或方法来识别和解决这些类型的资源问题?

最佳答案

根据 MSDN ,您必须在使用 ShowDialog 显示的表单上显式调用 Dispose(与 Show 方法不同):

When a form is displayed as a modal dialog box, clicking the Close button (the button with an X at the upper-right corner of the form) causes the form to be hidden and the DialogResult property to be set to DialogResult.Cancel. Unlike non-modal forms, the Close method is not called by the .NET Framework when the user clicks the close form button of a dialog box or sets the value of the DialogResult property. Instead the form is hidden and can be shown again without creating a new instance of the dialog box. Because a form displayed as a dialog box is hidden instead of closed, you must call the Dispose method of the form when the form is no longer needed by your application.

关于c# - 使用围绕对话框形式的语句来确保垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8315125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com