Visual Studio 2008 ContextSwitchDeadlock с log4net и NHibernate

Я сталкиваюсь с чрезвычайно странной ошибкой здесь, и я не действительно уверен, Следую ли я за правильным путем к решению ее или даже как решить ее.

Вот проблема, с которой я сталкиваюсь: Я начинаю отлаживать приложение WPF, которое использует log4net, NHibernate и LINQ к NHibernate, и когда я пытаюсь получить Объект от базы данных мое приложение, и иногда VS зависает в течение большого количества времени, и через некоторое время диалоговое окно исключения открывает показ сообщения, содержащего следующую информацию о ContextSwitchDeadlock MDA:

CLR не мог перейти от контекста COM 0x34fc1a0 к контексту COM 0x34fc258 в течение 60 секунд. Поток, который владеет целевым контекстом/квартирой, скорее всего, или делает, не нагнетание ожидают или обработка очень длинной рабочей операции, не качая сообщения Windows. Эта ситуация обычно оказывает отрицательное влияние производительности и может даже привести к становлению приложения не быстро реагирующее или использование памяти, накапливающееся постоянно со временем. Избегать этого

Я скопировал файлы кода в новый проект и удалил старый проект видеть, Мог ли я заставить это сообщение исчезнуть, думая, что это имело некоторое отношение к моей конфигурации. Я начал добавлять немного вещей за один раз для наблюдения то, что вызывало его, и когда я включал log4net код конфигурации, ошибка появилась снова. Сначала я включал его через AssemblyInfo и более позднюю конфигурацию кода канавки на запуске приложения, и абсолютно ничто не изменилось вообще :(

Так, вот мои результаты:

  • Это только происходит, когда я использую log4net.
  • Это происходит, когда NHibernate загружает Объект из базы данных (ленивая загрузка).

Я не знаю то, что могло бы быть источником этой ошибки. Это только происходит при отладке в Visual Studio. Я попытался выполнить шаги на разделе "Enabling and Disabling MDAs" следующей страницы: http://msdn.microsoft.com/en-us/library/d21c150d.aspx, но это не работает также, VS все еще зависает, и это - увеличения использования памяти.

Когда я обычно запускаю программу, ни одного из этого не происходит, таким образом, я вполне уверен, это не ситуация с мертвой блокировкой, как этот вопрос предполагает: contextswitchdeadlock (я также попробовал решения, отправленные там).

Из-за этого я решил отключить log4net и включить его снова при развертывании моего приложения.

Я отправляю этот вопрос узнать, столкнулся ли кто-то еще с этой ошибкой или если у кого-то есть некоторые предложения о том, как решить его. Наконец, это могло бы помочь кому-то еще сталкивающемуся с этой точно той же проблемой.

Заранее спасибо,

Jorge Vargas.

1
задан Community 23 May 2017 в 12:01
поделиться

1 ответ

При использовании DebugAppender все сущности в базы данных загружаются, и все данные записываются в отладочную информацию. Это вызывало MDA ContextSwitchDeadlock, поскольку для его выполнения требовалось более 60 секунд.

Отключение DebugAppender решило мою проблему.

Спасибо Маурисио Схефферу за подсказку.

2
ответ дан 3 September 2019 в 00:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: