Lors de l'utilisation de la bibliothèque d'entreprise, la fermeture manuelle des connexions DB a posé un problème, car GC, lors de l'analyse du tas, recherche des éléments hors de portée.SubSonic - Besoin de forcer manuellement les connexions fermées?
Une connexion faisant partie d'un pool est en cours d'utilisation mais l'état de connexion est interrompu ou en cours d'extraction, mais vous avez déjà reçu vos résultats, vous les gardez ouverts et les handles de connexion du pool sont épuisés.
Ainsi, l'ajout de la vérification manuelle de la connexion et la fermeture forcée des connexions est une bonne forme.
Maintenant, prenez SubSonic. Avec une base EntLib, je fais ce qui suit dans un bloc finally:
public static bool GetISOCountryCodes(out DataSet dsISOCountryCodes, out Response dbResponse)
{
dbResponse = new Response();
dsISOCountryCodes = new DataSet();
StoredProcedure sp = null;
try
{
sp = SPs.GetISOCountryCodes(null);
dsISOCountryCodes = sp.GetDataSet();
// set the response object properties
dbResponse = new Response((int)sp.OutputValues[0]);
return dbResponse.IsValid;
}
catch (System.Exception ex)
{
return dbResponse.IsValid;
}
finally
{
if (sp.Command != null && sp.Command.ToDbCommand().Connection != null &&
sp.Command.ToDbCommand().Connection.State == ConnectionState.Open)
sp.Command.ToDbCommand().Connection.Close();
}
}
Je sais que ça a été dit que vous ne devez pas faire manuellement ce, comme SubSonic le fera pour vous, cependant, je J'aimerais savoir si quelqu'un a rencontré des problèmes avec SubSonic ne fermant pas les connexions (encore une fois, car il utilise EntLib à la racine), et s'il y a de meilleures façons d'y parvenir.
Évidemment, dans toutes mes méthodes d'appel de données, je vais citer une méthode, par exemple, "ConnectionCloser()".
Merci.
Je n'ai jamais entendu parler de problèmes de gestion de connexion. Avez-vous un cas de repro pour cela, ou une référence, ou n'importe quoi pour sauvegarder cette déclaration? La gestion de la connexion est le travail principal du bloc de données, je m'attendais à avoir entendu parler du problème maintenant. –
Il y a un cas reproductible que j'ai eu en utilisant constamment Entlib 4.0 et 4.1. Où la piscine manquerait de connexions. Puisque Subsonic utilise Entlib, je suppose qu'il serait affecté par ce qui précède. En tant que tel, j'ai fait des fermetures explicites depuis que je suis tombé sur le problème avec entlib et n'ai jamais eu de problèmes de connexion depuis. Notez que c'était dans un système transactionnel élevé avec une base de données de 400 Go. – chiefbrownbotom
L'avez-vous signalé comme bug sur le site du projet Entlib à entlib.codeplex.com? Si vous avez et je l'ai manqué, je m'excuse. –