Quels sont les bons moyens de déboguer les timeouts? (C #)

Je construis un site qui fonctionne bien pendant quelques heures, mais les appels * .asmx et * .ashx commencent à expirer.

L'exception est la suivante: "Timeout expiré": le timeout écoulé avant l'obtention d'une connection du pool est peut-être dû au fait que toutes les connections groupées étaient utilisées et que la taille maximale du pool a été atteinte. "

J'utilise SubSonic comme ORM.

Je soupçonne que le problème est basé sur une tâche planifiée qui s'exécute toutes les quelques minutes et frappe la database. Lorsque je regarde dans "Current Activity" de SQL Server 2000, je vois qu'il y a:

  • 100 process avec le statut "dormir"
  • 100 serrures

Les 100 process proviennent de l'application ".Net SqlClient Data Provider" et la command est "AWAITING COMMAND".

Donc je suppose que c'est le problème. . mais comment puis-je résoudre ce problème? Est-ce que cela ressemble à une condition de blocage dans la DB? Aussitôt que je

c: \> iisrestart

, tout va bien (pendant un moment).

Merci – Je n'ai jamais rencontré quelque chose comme ça et je ne suis pas sûr de la meilleure façon de procéder.

Michael

Cela pourrait être une copy de ce problème – Le regroupement de connections fonctionne-t-il correctement dans Subsonic?

Si vous chargez des objects avec Load () au lieu de LoadAndCloseReader (), chaque connection restra ouverte et vous épuiserez éventuellement le pool de connections.

Lorsque vous appelez Load () sur une collection, le Reader rest ouvert. Assurez-vous d'appeler LoadAndCloseReader () si vous souhaitez que le lecteur se ferme ou utilisez un bloc using.

Cela aide aussi d'avoir du code source.

Je ne sais rien de Subsonic, mais peut-être que vous fuyez les «contexts» de database? Je vérifierais que toute ressource de database est éliminée après que vous en ayez fini …