Windows 窗口窗体已关闭但未销毁

Windows 窗口窗体已关闭但未销毁,windows,forms,destructor,Windows,Forms,Destructor,在我的Windows窗体应用程序中,当我关闭一个窗体(从基窗体派生)时,它的FormClosing和FormClosed事件会触发,但析构函数从不触发。它仍然会占用内存 关于如何在窗体关闭时完全销毁窗体的任何想法?析构函数(或者更准确地说,终结器-在.NET中没有析构函数)不能保证在.NET中执行-对象可能会在运行时突发奇想而被清除,甚至永远不会被清除。您不能依赖于您的终结器方法被调用 如果表单关闭时需要执行某些操作,请处理关闭事件 如果需要释放非托管资源(例如关闭打开的文件),请将此逻辑添加到

在我的Windows窗体应用程序中,当我关闭一个窗体(从基窗体派生)时,它的FormClosing和FormClosed事件会触发,但析构函数从不触发。它仍然会占用内存

关于如何在窗体关闭时完全销毁窗体的任何想法?

析构函数(或者更准确地说,终结器-在.NET中没有析构函数)不能保证在.NET中执行-对象可能会在运行时突发奇想而被清除,甚至永远不会被清除。您不能依赖于您的终结器方法被调用

如果表单关闭时需要执行某些操作,请处理关闭事件

如果需要释放非托管资源(例如关闭打开的文件),请将此逻辑添加到Dispose()方法

如果您担心内存使用,请不要担心内存使用。运行时根据自己的逻辑自动管理内存


引用:

如果它没有被销毁,这意味着垃圾收集器认为它不应该被销毁

这基本上意味着你要么:

  • 在某处保留对对象的引用
  • 让对象侦听事件(这也是对对象的一种引用)
  • 在没有对窗体的引用之前,垃圾收集器不会释放窗体


    如果您有重要的资源要处理,请将其设置为IDisposable,并使用dispose方法。

    感谢您的回复Yachai,我正在FormClosed事件中执行清理工作,但即使关闭它,它仍保留相同的内存。此表单是一个内部表单,因此,关闭它不会关闭应用程序。