De ma compréhension, .NET Piscine 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 SQLConnection CODE> 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? p>
pageload code>. 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. P>
3 Réponses :
Lorsque vous utilisez la mise en commun de la connexion, la fermeture d'un du MSDN Docs : P>
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. P>
blockQuote> sqlconnection code> 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. P>
La documentation MSDN sur Connexion SQL Server Fooling dit P >
Les connexions sont libérées dans la piscine quand elles sont fermées ou disposé p> blockQuote>
et p>
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 ... P> blockQuote>
En outre, il s'agit du pooleur de connexion qui déterminera si les connexions sont larguées de la piscine p>
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 p> blockQuote>
De ma compréhension, .Net va pisciner des objets SQLConnection p> blockQuote>
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). P>
Le
SQLConnection CODE> 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 code> est appelé et libérera la connexion lorsque
Fermer code> ou
Dispose code> est appelé. P>
Les deux concepts (
sqlconnection code> Les objets et les connexions réelles sur SQL Server) sont distincts, mais évidemment quelque peu liés. P>
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 i> 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 code> 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 i> tous simultanément.