我们正在开发一个大型 .NET Windows 窗体应用程序。尽管我们正在处理表单,但我们仍面临内存泄漏/使用问题。
场景是这样的:
- 我们的应用程序使用 60 KB 内存,并在网格中显示记录列表。
- 当用户点击一条记录时,它会打开一个表单,
myform.showDialog
,显示详细信息。内存从 60 KB 到 105 MB跳跃。 - 现在我们关闭表单
myform
以返回网格,然后处理该表单并将其设置为空。内存保持 105 MB。 - 现在,如果我们再次执行第 2 步,它会从 105 MB 跳到 150 MB 等等。
关闭 myForm
时如何释放内存?
我们已经尝试过GC.Collect()
等,但没有任何结果。
最佳答案
查找泄漏的首要位置是事件处理,而不是缺少 Dispose()
调用。假设您的容器(父表单)加载了一个子表单并为该子表单的事件添加了一个处理程序 (ChildForm.CloseMe
)。
如果要从内存中清除子窗体,则必须在它成为垃圾回收的候选者之前删除此事件处理程序。
关于c# - Windows 窗体应用程序中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3891567/