我的应用程序创建并销毁了许多.NET Windows窗体。每个表单都已关闭并正确处理,但从不垃圾收集。通过使用诸如dotMemory之类的工具进行分析,似乎这些表格已被视为GC的根。有什么方法可以防止这种情况,或强制垃圾收集器清理表单及其引用的对象?
答案 0 :(得分:1)
它不会充当GC根。
您的问题可能与事件有关,即您将拥有一个事件源,该事件源超出了事件侦听器对象之一。当您订阅表单外部的某个事件时,该事件源将保留一个引用。这将防止在事件源对象被垃圾回收之前对表单进行垃圾回收。可能的罪魁祸首是静态对象作为事件源?
请牢记这一点。
如果是问题所在,您应该可以通过取消订阅表单关闭事件来解决。