我有一个 UI,winform,它有很多控件,如 tabcontrols、大量文本框(跨选项卡最少 25 个)组合框、复选框、按钮、标签、树控件等。
这些控件中的大多数都注册了 ctrl 事件,例如 textchanged、click 等……因为我遇到了内存不足异常,所以我几乎没有什么查询:
问题:
- 在表单的 dispose 函数中应该调用每个 ctrl 的 dispose 吗?
- ctrls 订阅的事件,如 textchanged、click 事件等是否应该在 dispose 函数中取消注册?GC 是否负责取消注册为 ctrls 添加的事件,因为在设计器中添加了代码片段?
一些信息:该应用程序在 2GB 内存机器上进行了多达 100 次迭代的稳定性测试。每次迭代它都会执行相同的测试(启动对话框,进行一些点击或编辑一些值,然后关闭)。它运行了将近8个小时。在第 45 次或第 46 次迭代时,它抛出了这个异常。是的,对话框中的所有控件都注册了一个事件或其他事件。一些文字改变了一些checkedchanged或点击等