未为公开声明的类调用Finalize



我有一个在许多形式下都需要的类,所以我在一个模块中声明了它。

Module modTTS
    Public g_TTS As clsTTS
End Module

我在这个类中有一个Finalize方法:

Protected Overrides Sub Finalize()
    Stop'this is never called. I don't know why
    MyBase.Finalize()
End Sub

我没有在程序结束时显式地销毁类。我只是想默默地让它溜走。这是无效的吗?没有调用Finalize过程的原因可能是什么?

谢谢!

根据建议,我已将我的班级改为:

公共类clsTTS:实现IDisposable

Private _Synth As New SpeechSynthesizer
Private _bDisposed As Boolean = False
' Public implementation of Dispose pattern callable by consumers. 
Public Sub Dispose() Implements IDisposable.Dispose
    Dispose(True)
    GC.SuppressFinalize(Me)
End Sub
' Protected implementation of Dispose pattern. 
Protected Overridable Sub Dispose(ByVal uDisposing As Boolean)
    If _bDisposed Then
        Return
    End If
    If uDisposing Then
        ' Free any other managed objects here. 
        If Not _Synth Is Nothing Then
            _Synth.Dispose()
        End If
    End If
    ' Free any unmanaged objects here. 
    _bDisposed = True
End Sub

下面是一个使用ApplicationContext类- MSDN的例子

同样,Finalize()可能不会在应用程序线程终止之前被调用,因此,资源永远不会被释放。

应该实现IDisposable Interface - MSDN。在ApplicationExit上调用对象的.Dispose()方法

iDisposable很容易实现,只需在Class声明中添加: Implements iDisposable,智能感知将添加必要的过程。

您还可以在FormClosing/FormClosed事件中处置/关闭对象。

就我个人而言,我只使用Shared成员作为函数,或保留一些字符串变量,而不是对象。

查看下面的链接,了解如何对静态成员进行反初始化:

http://bytes.com/topic/c-sharp/answers/536465-there-anything-like-static-destructor

如何在静态变量结束前获得通知

最新更新