以下语句是否会导致内存泄漏:
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?
答案 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