为什么 class 在退出应用程序时没有被释放?

Why doesn't class become disposed when exiting application?

我记不太清了,但我在前一段时间测试和关闭我的应用程序时遇到了类似 "object disposed exception" 的错误。我需要手动处理每个对象吗?或者使用控件/对象的正确方法是什么?

错误指示主窗体中的这一行:

Private th As New SellerTimerHandler

我几乎没有得到这个错误(我无法测试它)所以我想知道避免不必要地占用 space 内存的一般想法,不仅在执行和关闭时,而且在崩溃之后。

当您尝试访问已处置的对象时 抛出 System.ObjectDisposedException 该异常与 class/an 对象无关 被处置。

当您的应用程序关闭时,您无需对其 objects/resources 执行任何操作,因为 Windows 会为您处理。对象的处理和垃圾收集只需要在运行时执行,以便为应用程序释放内存以便能够继续运行,并且不会耗尽所有 RAM。

当进程 运行 时,操作系统完全了解 所有 它正在使用的系统资源;这意味着当进程实际关闭时,OS 只是释放它使用的所有内存 (这也适用于进程崩溃时).

我猜你有一个计时器或其他东西 运行 定期使用你 class 中的对象,这些对象在关闭时由 GC 处理。

您应该在 class 中实现 IDisposable。如果它是一个表单,它已经存在了,你应该在设计器中寻找 Dispose(bool)

如果你有计时器 运行 你应该在那里停止它们并将它们清零。事实上,您 class 中的任何托管对象都应该在这里处理。这样你就可以控制你的对象被处理的顺序

Protected Overridable Sub Dispose(disposing As Boolean)
    If Not Me.disposedValue Then
        If disposing Then
            ' TODO: dispose managed state (managed objects).
            ' i.e. stop all timers
        End If

        ' TODO: free unmanaged resources (unmanaged objects) and override Finalize() below.
        ' TODO: set large fields to null.
    End If
    Me.disposedValue = True
End Sub