7
votes

La méthode d'élimination de SQLConnection sera-t-elle interférée avec le pool de connexion?

De ma compréhension, .NET Piscine SQLConnection Objets où la chaîne de connexion est identique par défaut. La connexion sera-t-elle toujours mise en commun si j'appelle la méthode Dispose?

Cette question est posée dans le contexte d'une application ASP.NET qui effectue parfois de nombreux hits à la base de données dans un seul événement pageload . Je veux que les connexions soient mises en commun, mais souhaiterions confirmation que la fermeture et la mise au rebut de la connexion une fois que l'opération de données est terminée n'interfère pas avec la manipulation de .NET du pool de connexion.


0 commentaires

3 Réponses :


10
votes

Lorsque vous utilisez la mise en commun de la connexion, la fermeture d'un sqlconnection indique simplement le pool de connexion que vous avez terminé. La piscine décidera ensuite de fermer ou non la connexion, ou de la réutiliser.

du MSDN Docs :

Si la SQLConnection est hors de portée, elle ne sera pas fermée. Par conséquent, vous devez expliquer explicitement la connexion en appelant près ou en éliminant. Fermer et éliminer sont fonctionnellement équivalents. Si la réalisation de la valeur de mise en commun de la connexion est définie sur true ou oui, la connexion sous-jacente est renvoyée dans le pool de connexion. D'autre part, si la mise en commun est définie sur FALSE ou non, la connexion sous-jacente au serveur est fermée.


0 commentaires

3
votes

La documentation MSDN sur Connexion SQL Server Fooling dit

Les connexions sont libérées dans la piscine quand elles sont fermées ou disposé

et

Nous vous recommandons vivement de fermer toujours la connexion lorsque vous sont finis en l'utilisant pour que la connexion soit renvoyée à la bassin. Vous pouvez faire cela en utilisant les méthodes de fermeture ou d'élimination de la Objet de connexion ...

En outre, il s'agit du pooleur de connexion qui déterminera si les connexions sont larguées de la piscine

Le poolier de connexion supprime une connexion de la piscine après avoir été oisif depuis longtemps, ou si le pooleur détecte que le La connexion avec le serveur a été coupée


0 commentaires

1
votes

De ma compréhension, .Net va pisciner des objets SQLConnection

Non, le fournisseur SQL mettra en commun les connexions sous-jacentes à SQL Server (avec des pools séparés basés sur la chaîne de connexion).

Le SQLConnection Les objets obtiennent une connexion groupée (ou créeront un nouveau, etc., en fonction de ce qui est configuré pour la mise en commun, si une connexion groupée est disponible) lorsque Ouvrir est appelé et libérera la connexion lorsque Fermer ou Dispose est appelé.

Les deux concepts ( sqlconnection Les objets et les connexions réelles sur SQL Server) sont distincts, mais évidemment quelque peu liés.


2 commentaires

En ce qui concerne votre premier point, c'est ce que je pensais aussi, mais le MSDN Doc que j'ai pointé dans ma réponse semble ambigu "Lors de la création d'une piscine, une connexion multiple objets sont créées et ajoutées à la piscine afin que le minimum La taille de la piscine est satisfaite "et" lorsqu'un objet SQLConnection est demandé, il est obtenu à partir du pool si une connexion utilisable est disponible "?? Je pense que cela est trompeur car il contredit quelques points plus tôt dans les docs ..


@cpedros - Oui, je dirais que c'est trompeur - il s'agit de "Objets de connexion" (les connexions sous-jacents sous-jacents) et "Objets SQLConnection" - SQLConnection S sont des objets gérés et vous pouvez en créer 10000 , tous partageant une seule chaîne de connexion avec une piscine maximale = 100. Cela échouera lorsque vous essayez de Ouvrir tous simultanément.