Contextswitchdeadlock Ошибка в C# при чтении XML-файлов

У меня странная ошибка:

Помощник по управляемой отладке 'ContextSwitchDeadlock' обнаружил проблему в 'C:\Documents and Settings\ Лена Г \ Мои документы \SchoolStuff\IR Information\ Домашняя работа \FianlProject\finalProject\finalProject\bin\Debug\finalProject.vshost.exe'. Дополнительная информация: CLR не удалось перейти из контекста COM 0x3407968 в контекст COM 0x3407ad8 в течение 60 секунд. Поток, который владеет целевым контекстом / квартирой, скорее всего либо выполняет некачивающее ожидание, либо обрабатывает очень длительную операцию без прокачки сообщений Windows. Эта ситуация, как правило, оказывает негативное влияние на производительность и может даже привести к тому, что приложение перестает отвечать на запросы или постоянно накапливается использование памяти. Чтобы избежать этой проблемы, все потоки однопоточных квартир (STA) должны использовать примитивы перекачки (такие как CoWaitForMultipleHandles) и регулярно перекачивать сообщения во время длительных операций.

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

Оцените, если кто-то может помочь мне решить эту проблему.

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

Лена

1 ответ

Уф! Помощники по управляемой отладке замечательны, но они дают подробные сообщения об исключениях. В этом случае Visual Studio предупреждает вас о том, что поток в вашем приложении, который выполняет вызов COM, не воспроизводит "хорошо" и не отвечает должным образом на сообщения Windows.

Вы можете продолжить пробежку, и все должно быть хорошо - но в первую очередь имеет смысл выяснить, что является причиной проблемы.

Что именно делает ваш код? Как он читает файл XML? Насколько большие файлы?

Если он просто сидит в цикле, анализируя XMLDocument, я был бы удивлен, увидев эту ошибку. Вы можете (вздрогнуть) захотите проверить журнал событий Windows, чтобы увидеть, есть ли какие-либо поврежденные сектора на вашем жестком диске...

С другой стороны, если вы вообще используете фоновые потоки, то может быть проблема с нехваткой ресурсов или что где-то сидит блокирующий вызов, который не дает достаточно часто.

Другие вопросы по тегам