.NET内存泄漏和最佳实践

w00*_*977 0 .net vb.net

在Microsoft.NET(VB)中编写函数以避免内存泄漏的最佳方法是什么.我一直遵循这种风格:

Public Sub TestMemoryLeak()
        Dim testCon As SqlConnection
        Try
            testCon = New SqlConnection
        Catch

        Finally
            If testCon.State = ConnectionState.Open Then
                testCon.Close()
            End If
            testCon = Nothing
        End Try
    End Sub
Run Code Online (Sandbox Code Playgroud)

这里连接引用是在TRY子句之前创建的,并在TRY子句之后初始化.我相信即使抛出异常,连接也会被关闭并取消引用.这是好习惯吗?我看到很多代码在TRY子句中创建了引用和解引用,但这意味着如果抛出异常,内存将无法正确处理.一些开发人员说他们不喜欢在finally子句中清理.我不完全明白为什么.

SLa*_*aks 6

你应该只使用这个Using声明:

Using testConn As New SqlConnection(...)
    ...
End Using
Run Code Online (Sandbox Code Playgroud)

这将编译为Finally将在所有情况下处置的.