J'ai soupçonné qu'une connexion à une base de données utilisée dans l'une de nos applications n'est pas toujours fermée. Je suis allé voir le code et j'ai trouvé une classe DataProvider
qui a SqlConnection
objet. La connexion est ouverte dans le constructeur de cette classe et fermée dans sa méthode Dispose
(ne jugez pas cela, je sais que garder une connexion ouverte est mauvaise, ce n'est juste pas mon code et ce n'est pas le point de la question de toute façon). La méthode Dispose
est mis en œuvre comme ceci:La fermeture d'une connexion de base de données dans la méthode Dispose est-elle correcte?
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
if (_conn != null)
_conn.Close();
}
_disposed = true;
}
}
La question est:
garantit-il toujours que la connexion est fermée?
Ce code est-il correct?
Je pense qu'il devrait être _conn.Dispose()
appelé - ai-je raison et pourrait-il affecter la fermeture de la connexion (probablement pas)?
Si vous avez un soupçon confirmer en vérifiant à l'aide des compteurs de performance. – RichardOD
Une valeur clé à vérifier est NumberOfPooledConnections. – RichardOD