Vb.net 关闭由函数创建的DbConnection
也许这是一种完全错误的做事方式,如果是的话,你能给我指出正确(优雅)的方式吗 我的vb.net项目中有一个模块。该模块处理数据库连接。这个想法是让其他模块在需要创建连接时使用此模块 对于每种数据库类型,我都有打开db连接的函数。例如,我有一个打开oracle连接的函数Vb.net 关闭由函数创建的DbConnection,vb.net,function,dbconnection,Vb.net,Function,Dbconnection,也许这是一种完全错误的做事方式,如果是的话,你能给我指出正确(优雅)的方式吗 我的vb.net项目中有一个模块。该模块处理数据库连接。这个想法是让其他模块在需要创建连接时使用此模块 对于每种数据库类型,我都有打开db连接的函数。例如,我有一个打开oracle连接的函数 Friend Function OracleConnection(ByVal HostAddress As String, ByVal PortNumber As String, ByVal DBName As String, B
Friend Function OracleConnection(ByVal HostAddress As String, ByVal PortNumber As String, ByVal DBName As String, ByVal UserId As String, ByVal Password As String) As OracleConnection
Try
OracleConnection = New OracleConnection("Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" & HostAddress & ")(PORT=" & PortNumber & "))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=" & DBName & ")(FAILOVER_MODE=(TYPE=select)(METHOD=BASIC)(RETRIES=180)(DELAY=5))));User Id=" & UserId & ";Password=" & Password & ";")
OracleConnection.Open()
OracleConnection = OracleConnection
Catch ex As OracleException
MsgBox(ex.Message, MsgBoxStyle.Critical)
OracleConnection = Nothing
End Try
Return OracleConnection
End Function
建立这种联系似乎很有效。我的问题是,我现在不确定如何关闭此函数创建的连接。选项1
您应该始终通过调用close
或Dispose
关闭OracleConnection对象,或通过使用语句在中使用OracleConnection对象来关闭OracleConnection对象
否则,垃圾收集可能无法立即释放它们。如果在大量连接等待垃圾收集器删除时达到最大连接数,则此类延迟可能会导致错误
相比之下,通过调用Close关闭连接可以更有效地使用本机资源,从而增强可伸缩性并提高整体应用程序性能。要确保连接始终关闭,请使用块打开内部的连接
Public Sub InsertRow(ByVal connectionString As String)
Dim queryString As String = "INSERT INTO Dept (DeptNo, Dname, Loc) values (50, 'TECHNOLOGY', 'DENVER')"
Using connection As New OracleConnection(connectionString)
Dim command As New OracleCommand(queryString)
command.Connection = connection
Try
connection.Open()
command.ExecuteNonQuery()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Using
End Sub
有关详细信息
选择2
请看一下Oracle推荐的最佳做法:
创建OracleConnection时,您会自动获得一个连接池。对于大多数中间层应用程序,您都希望利用这一点。您还需要通过打开注册表中的性能计数器,针对实际工作负载调整池
有关连接池的详细信息,请参阅ODP.NET联机帮助。池设置将添加到连接字符串中
人们在使用OracleConnections时遇到的另一个问题是,垃圾收集器没有意识到它们是多么真正的资源密集型,也没有及时清理它们。ODP.NET没有完全管理,因此一些资源对垃圾收集器隐藏,这一事实使情况更加复杂
因此,最佳做法是关闭()和处置()所有Oracle ODP.NET对象(包括OracleConnection)以强制清理它们
学分归谁