Sunday, January 13, 2008

Default Pool di connessione

. Sunday, January 13, 2008

Nel Framework 2.0 per il provider Sql Server il pool connection è abilitato di default quindi per disattivarlo bisogna impostare la keyword Pooling a false nella stringa di connessione.
Ma come si può verificare?
Per confermare quanto detto è possibile controllare il contenuto di una proprietà privata InnerConnection dell'oggetto SqlConnection.
PoolConncetionControllando il contenuto della proprietà di due connessioni aperte in un blocco using, in modo da pulire le risorse, ci si rende conto che il provider Sql .NET  non chiude la connessione ma la memorizza in un pool per essere così riutilizzata in un secondo momento.

 

 


Il codice della verifica:

   1: Imports System.Data.SqlClient
   2: Imports System.Reflection
   3: ...
   4: Dim connectionSQL As String = "Data Source=.;Integrated Security=true"
   5:  
   6: Dim propertySqlCon As PropertyInfo = GetType(SqlConnection).GetProperty( _
   7:   "InnerConnection", BindingFlags.NonPublic Or BindingFlags.Instance)
   8: Dim valueObj, valueObj2 As Object
   9: Using sqlCon As SqlConnection = New SqlConnection(connectionSQL)
  10:   sqlCon.Open()
  11:   valueObj = propertySqlCon.GetValue(sqlCon, Nothing)
  12:   sqlCon.Close()
  13: End Using
  14: Using sqlCon As SqlConnection = New SqlConnection(connectionSQL)
  15:   sqlCon.Open()
  16:   valueObj2 = propertySqlCon.GetValue(sqlCon, Nothing)
  17:   sqlCon.Close()
  18: End Using
  19: If (valueObj Is valueObj2) Then
  20:   'Con Pool connection
  21:   Dim s As String = "Pool"
  22: Else
  23:   Dim s As String = "Nessun Pool"
  24: End If

Si può verificare anche attraverso il perfmon( Performance Monitor di Windows ) attraverso alcuni contatori come NumberOfPooledConnections, NumberOfActiveConnectionPools introdotti con ADO.NET 2.0.
A questo punto ho provato a fare la stesso esperimento anche con il provider OLE DB, infatti stando a ciò che si afferma su msdn il pool di connessione è abilitato di default(OLE DB Services=-4 per disattivare il pool).
Riscrivendo il codice visto in precedenza, usando questa volta OleDbConnection, ho verificato che non viene mai attivato un pool di connessione.
Qualcuno conosce una spiegazione?

0 commenti:

Post a Comment