赞助商

c# – this.Dispose()在关闭后不会释放Form使用的内存.

发布时间:2019-06-12 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了c# – this.Dispose()在关闭后不会释放Form使用的内存.脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 Windows窗体应用程序,其中单击某些按钮从第二个窗体创建对象.在用户关闭此第二张表单时,此表单使用的内存不会被释放(根据任务管理器).

我尝试在主代码中的exit按钮,this.close(),form2 = null上使用this.dispose(),并在处理之前通过代码清除了此窗体中的所有控件.这些都没有起作用,并且每次用户点击按钮时,应用程序的内存使用量增加,而前一个实例使用的内存不会被释放.

我该用什么来解决这个问题?

解决方法

Calling Dispose不会清除对象使用的内存. Dispose意在用于运行用户定义的代码,释放不会自动释放的资源,例如文件句柄,网络句柄,数据库连接等.

可能的罪魁祸首可能是将事件附加到其外的对象(可能是第一种形式)的第二种形式,并且永远不会附加它们.

如果您有第二种形式的任何事件,请将其附加在您的OnClose覆盖中 – 这将使得第二个格式符合垃圾收集的条件.

请注意,.NET垃圾收集器是非常不可预测的,它可能会在清理所有符合资格的旧版本的实例之前创建一些对象实例.一个确定的方法(不使用内存分析器)是在终结器中放置一个断点:

public class MyForm : Form {
  ~MyForm() {
    //breakpoint here
  }
}

如果终结者被调用,那么这个类可以,如果没有,你仍然有泄漏.您也可以给GC一个“踢” – 但仅用于故障排除 – 不要将此代码留在生产中 – 启动GC:

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();

将上述代码放在你关闭后运行的地方,并处理第二个表单.您应该在MyForm终结器中点击断点.

总结

以上是脚本之家为你收集整理的c# – this.Dispose()在关闭后不会释放Form使用的内存.全部内容,希望文章能够帮你解决c# – this.Dispose()在关闭后不会释放Form使用的内存.所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:76874919,请注明来意。
标签: