Si vous ar exécuter le lecteur dans une boucle, où il exécute plusieurs fois, alors assurez-vous que vous utilisez CommandBehavior.CloseConnection
SqlCommand cmd = new SqlCommand();
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Si vous n'êtes pas, chaque fois que la boucle exécutera la ligne, quand il se termine et que le rdr et l'objet de connexion tombent hors de portée, l'objet connexion ne sera pas explicitement fermé, donc il ne sera fermé et relâché dans le pool que lorsque le garbage collector finira par le finaliser ...
Ensuite, si votre boucle est assez rapide, (ce qui est très probable), vous serez à court de connexions. (Le pool a une limite maximum qu'il peut générer)
Cela entraînera une latence et des retards supplémentaires car le code continue de créer des connexions supplémentaires inutiles (jusqu'au maximum) et attend que le GC "rattrape" la boucle qui les utilise ...
Pouvez-vous poster du code? –
Est-ce que le profileur de requête Sql révèle des indications sur le problème? –
EJB: le code n'est pas à publier. Le problème est le même même si nous utilisons la commande pure Execute reader (disponible dans MS help) – Maciej