0

以下语句是否会导致内存泄漏:

Imports System.Data.SQLClient

Public Function getConnection () As SQLConnection
    return New SQLConnection()
End Function

Public Sub TestConnection()
    Dim con As SQLConnection
    con = getConnection
    con.close
    con = Nothing
End Sub

如何在 getConnection 中的 SQLConnection 上调用 .close 或 .dispose?

4

2 回答 2

2

您正在返回一个引用类型,因此您在 TestConnection 中对同一个实例进行操作,因此这里没有内存泄漏。最后,您有 2 个实例为 null(gc 将收集它们),但连接已关闭。

于 2012-11-16T15:22:12.650 回答
1

不会有内存泄漏,因为在您调用该方法后它会被垃圾回收。

但是这种方法只会引起混乱。一旦完成连接(即使出现异常),您应该始终处理连接(隐式关闭它)。

您可以在语句的 finallyTry/Finally或(更容易)中做到这一点。Using但是由于这两种方法都需要包装连接,因此您的方法使调用方法可以忘记它。因此,这是不好的做法。

所以只需这样做:

Public Sub TestConnection()
    Using con = New SqlConnection("connection string here")
        Using cmd = new SqlCommand("sql query here", con)
            ' do something, f.e. cmd.ExecuteNonQuery() '
        End Using
    End Using
End Sub
于 2012-11-16T15:24:21.217 回答