VB.NET返回一个对象

时间:2012-11-16 15:11:07

标签: vb.net

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

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?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

没有内存泄漏,因为在调用方法后它将被垃圾收集。

但这种方法除了造成混乱外什么也没做。一旦完成连接(即使出现异常),您应该始终处置连接(隐含地将其关闭)。

您可以使用Using语句在最终的Try/Finally或(更简单)中执行此操作。但由于两种方法都需要包装连接,因此您的方法可以使调用方法忘记它。因此这是不好的做法。

所以简单地这样做:

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