Question

Je suis face à un bug très bizarre ici et je ne suis pas vraiment sûr si je suis la bonne voie pour résoudre ou même comment le résoudre.

Voici le problème que je suis confronté: je commence le débogage d'une application WPF qui utilise log4net, NHibernate et LINQ à NHibernate, et lorsque je tente d'obtenir une entité de la base de données ma demande et parfois VS suspension pour beaucoup de temps et après un certain temps une boîte de dialogue d'exception s'ouvre et affiche un message contenant les informations suivantes sur un ContextSwitchDeadlock MDA:

  

Le CLR a été incapable de transition du contexte COM 0x34fc1a0 au contexte COM 0x34fc258 pendant 60 secondes. Le fil qui possède le contexte de destination / appartement est le plus susceptible de faire soit une attente non de pompage ou le traitement d'une opération très longue course sans pompage des messages Windows. Cette situation a généralement un impact négatif sur les performances et peut même conduire à l'application devient une utilisation non réactif ou de la mémoire accumulant sans cesse au fil du temps. Pour éviter cela,

Je copié les fichiers de code à un nouveau projet et supprimé l'ancien projet pour voir si je pouvais faire disparaître ce message, pensant qu'il avait quelque chose à voir avec ma configuration. Je commencé à ajouter quelques petites choses à un moment pour voir ce qui était à l'origine, et quand j'inclus le code de configuration log4net le bug réapparut. Tout d'abord il est inclus dans AssemblyInfo et la configuration du code plus tard creux au démarrage de l'application, et absolument rien changé du tout: (

Alors, voici mes conclusions:

  • Il arrive que lorsque j'utilise log4net.
  • Il arrive quand charge NHibernate une entité de base de données (lazy loading).

Je ne sais pas ce qui pourrait être la source de ce bug. Il ne se produit que lors du débogage dans Visual Studio. J'ai essayé suivant les étapes de la section « Activation et désactivation MDAs » de la page suivante: http://msdn.microsoft.com/en-us/library/d21c150d.aspx , mais cela ne fonctionne pas non plus, VS encore se bloque et il augmente son utilisation de la mémoire.

Quand je lance le programme normalement rien de tout cela se produit, alors je suis sûr que ce n'est pas une situation de blocage, comme cette question suggère: contextswitchdeadlock (je l'ai aussi essayé les solutions publiées là-bas).

En raison de cela, j'ai décidé de log4net activer ou la désactiver à nouveau lors du déploiement de mon application.

Je souhaite publier cette question pour savoir si quelqu'un a d'autre face à ce bug ou si quelqu'un a des suggestions sur la façon de le résoudre. Enfin, il pourrait aider quelqu'un d'autre face à ce problème même.

Merci à l'avance,

Jorge Vargas.

Était-ce utile?

La solution

Lorsque vous utilisez la DebugAppender toutes les entités dans les bases de données sont chargées et toutes ses données écrites à la sortie de débogage. Cela a été l'origine du ContextSwitchDeadlock MDA puisqu'il tookmore de 60 secondes à courir.

La désactivation du DebugAppender résolu mon problème.

Merci à Mauricio Scheffer pour la pointe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top