我记不起来了,但在测试和关闭我的应用程序时,我在前一段时间内收到了“对象处理异常”这样的错误。我是否需要手动处理每个对象?或者使用控件/对象的正确方法是什么?
错误以主要形式表示此行:
Private th As New SellerTimerHandler
我几乎没有得到这个错误(我无法测试它)所以我想知道一般的想法是避免不必要地占用内存中的空间,不仅在执行和关闭时,而且在崩溃之后。
答案 0 :(得分:1)
当您尝试访问已经处置的对象时,会引发System.ObjectDisposedException
。该异常与类/对象无被处置。
当您的应用程序关闭时,您不需要对其对象/资源执行任何操作,因为Windows会为您处理。只需要在运行时执行对象的处理和垃圾收集,以释放内存,使应用程序能够继续运行,并且不会占用所有RAM。
当进程正在运行时,操作系统完全了解所有它正在使用的系统资源;这意味着当进程实际关闭时,操作系统只会释放它使用的所有内存(这适用于进程崩溃时)。
答案 1 :(得分:1)
我猜你有一个计时器或其他运行的东西,它会定期使用你班上的物品,这些物品在关闭时由GC处理过。
您应该在班级中实施IDisposable
。如果它是表单,它已经存在,您应该在设计器中查找Dispose(bool)
如果你有定时器运行,你应该在那里停止并取消它们。实际上,您的类中的任何托管对象都应该放在这里。这样,您就可以控制对象的处理顺序
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