Vb.net 关闭由函数创建的DbConnection

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

也许这是一种完全错误的做事方式,如果是的话,你能给我指出正确(优雅)的方式吗

我的vb.net项目中有一个模块。该模块处理数据库连接。这个想法是让其他模块在需要创建连接时使用此模块

对于每种数据库类型,我都有打开db连接的函数。例如,我有一个打开oracle连接的函数

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)以强制清理它们

学分归谁