c# - Windows 窗体应用程序中的内存泄漏

标签 c# .net winforms memory-leaks c#-3.0

我们正在开发一个大型 .NET Windows 窗体应用程序。尽管我们正在处理表单,但我们仍面临内存泄漏/使用问题。

场景是这样的:

  1. 我们的应用程序使用 60 KB 内存,并在网格中显示记录列表。
  2. 当用户点击一条记录时,它会打开一个表单,myform.showDialog,显示详细信息。内存从 60 KB 到 105 MB跳跃
  3. 现在我们关闭表单 myform 以返回网格,然后处理该表单并将其设置为空。内存保持 105 MB
  4. 现在,如果我们再次执行第 2 步,它会从 105 MB 跳到 150 MB 等等。

关闭 myForm 时如何释放内存?

我们已经尝试过GC.Collect()等,但没有任何结果。

最佳答案

查找泄漏的首要位置是事件处理,而不是缺少 Dispose() 调用。假设您的容器(父表单)加载了一个子表单并为该子表单的事件添加了一个处理程序 (ChildForm.CloseMe)。

如果要从内存中清除子窗体,则必须在它成为垃圾回收的候选者之前删除此事件处理程序。

关于c# - Windows 窗体应用程序中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3891567/

相关文章:

.net - VS2015尝试运行应用程序时出错: Invalid Pointer

c - 尝试在 Winforms 中编写泄漏代码

c# - 将数据插入数据库

C# + UWP : Convert Windowspath to ms-appdata uri

c# - 奇数 : @myRecordArray[0] returns invalid pointer if array size is bigger than 4136

c# - 如何在 vb.net windows 应用程序中打印 html 页面

C# 确保自定义强制转换在迭代父类(super class)型列表时使用父类(super class)型的子类型

c# - 重新定位列表中的项目

c# - Plinq 的范围分区与 block 分区?

c# - 位置服务关闭时,Windows 8 手机应用程序在打开时崩溃