gpt4 book ai didi

C# WinForm 内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-03 19:22:15 25 4
gpt4 key购买 nike

我有一个很大的 winform 类,它从这样的小类调用:

    void login()
{
mainForm f1 = new mainForm();
f1.ShowDialog();
}

主窗体在登录后会占用大量内存(我在任务管理器中检查过)。关闭主窗体后,程序返回到登录窗体。在这一步,我再次检查任务管理器,发现我的程序没有释放 mainForm 使用的内存。登录后,我的程序崩溃并显示“内存不足”错误。

我不得不说我测试了 f1.Dispose()、f1=null、GC.Collect() 和我发现的所有其他方法。

它只会在我关闭登录表单时释放内存(它是 Application.Run 中使用的起始类)

我想像关闭程序一样销毁 mainForm 实例 (f1) 和此窗体的所有资源。

最佳答案

不太确定 OOM 与登录表单有什么关系。关闭或处理表单肯定不会像 Taskmgr.exe 所报告的那样减少内存使用。

但你肯定做错了。对话框在 Winforms 中的处理方式不同,它不会像您使用 Show() 显示的表单那样自动处理。必然如此,您希望在对话框关闭后检索用户在对话框中输入的任何内容,这在处理对话框时会很危险。所以你必须自己做。正确的模式是:

    using (mainForm f1 = new mainForm()) {
if (f1.ShowDialog() == DialogResult.Ok) {
// Retrieve data entered by user and do something with it
//...
}
}

使用 using 语句确保对话实例在您检索到对话结果后被释放。

关于C# WinForm 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11383739/

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