Je ne comprends pas quelle est la différence de syntaxe entre une connexion normale et un pool de connexions.
Lorsque j'utilise la clé using
telle que:
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
command.ExecuteNonQuery();
}
Est-ce la manière de réaliser un pool de connexion?
Vous pouvez en savoir plus sur le regroupement de connexions ici .
Fondamentalement, tant que la chaîne de connexion est la même (casse comprise), les connexions seront prises à partir du même pool de connexions.
Vous ne contrôlez pas le pool de connexions avec des connexions, mais avec la chaîne de connexion. La plupart des fournisseurs ADO utilisent le pooling par défaut.
L'instruction using
est utilisée pour appeler la méthode Dispose
de l'objet (dans ce cas, la classe de connexion). Ce faisant, la connexion est soit renvoyée au pool, soit en cours de déconnexion, en fonction de la configuration de la chaîne de connexion.
Vous devez également savoir que les connexions ne sont pas directement renvoyées au pool si des transactions distribuées sont utilisées (TransactionScope
dans .Net 4). Les connexions sont renvoyées lorsque la transaction est terminée/annulée.
Si vous n'utilisez pas using
, vousdevriezvous assurer que vous appelez Connection.Close()
dès que possible. Surtout si votre application est soumise à une charge quelconque.
La gestion du pool de connexions est abstraite en utilisant SqlConnection comme ci-dessus. Par défaut, le pool de connexions ADO.NET est activé et vous pouvez le contrôler davantage, par exemple en le désactivant ou en contrôlant la taille du pool dans la chaîne de connexion, par exemple.
Éteindre
Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Pooling=false;
ou contrôler min et max
Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Min Pool Size=5; Max Pool Size=20;
Explication plus détaillée et méthode de vérification du pool http://www.codeproject.com/KB/dotnet/ADONET_ConnectionPooling.aspx
pour autant que je sache,
le regroupement de connexions est géré par le client ado.net, car établir des connexions à la base de données est une opération coûteuse. ado.net établit un pool de connexions et chaque fois que vous en avez besoin, il essaie de le créer à partir d'un pool. même si vous dites au code client de fermer la connexion, ado.net conserve cette connexion pour une utilisation ultérieure. vous ne gérez pas la mise en commun
le pool de connexions est indiqué dans le fichier web.config de l'application. quand vous utilisez using, vous dites que l'objet doit être éliminé en fin d'utilisation.
Connection Pooling signifie qu'une fois que l'objet de connexion est ouvert, puis plutôt que de recréer la connexion encore et encore, Ado.Net stocke ou met en cache l'objet de connexion dans Pooler . Plus tard, si quelqu'un va ouvrir la connexion, il ne suivra pas la série d'étapes qu'il a déjà accomplie. Désormais, il suffit de copier la connexion depuis le pool de connexions où elle a déjà été mise en cache.
Une fois que nous avons terminé les opérations sur la base de données, nous devons fermer la connexion, qui sera ensuite renvoyée dans le pool et prête à être réutilisée lors du prochain appel Open.
En savoir plus avec le meilleur exemple de regroupement de connexions: - http://www.gurujipoint.com/2017/07/what-is-connection-pool-in-aspnet.html
La connexion SQL par défaut est le regroupement de connexions . (Taille maximale du pool = 100)
Vous pouvez configurer votre pool de connexion à partir de la chaîne de connexion.
Vous pouvez trouver plus d'informations sur la chaîne de connexion depuis ici .