Я получаю сообщение об ошибке, которое не могу устранить. Это происходит из Visual Studio или отладчика. Я не уверен, является ли окончательное состояние ошибки в VS, отладчике, моей программе или базе данных.
Это приложение для Windows. Не веб-приложение.
Первое сообщение от VS - это всплывающее окно, в котором говорится:
«Никакие символы не загружены ни для одного кадра стека вызовов. Исходный код не может быть отображен».
Когда это щелкают, я получаю:
« ContextSwitchDeadlock был обнаружен » вместе с длинным сообщением, воспроизведенным ниже.
Ошибка возникает в цикле, который просматривает DataTable. Для каждой строки он использует значение ключа (HIC #) из таблицы в качестве параметра для SqlCommand. Команда используется для создания SqlDataReader, который возвращает одну строку. Данные сравниваются. Если обнаружена ошибка, строка добавляется во вторую таблицу данных.
Ошибка, по-видимому, связана с тем, сколько времени требуется для выполнения процедуры (т. Е. Через 60 с), а не с тем, сколько ошибок найдено. Я не думаю, что это проблема памяти. В цикле не объявляются переменные. Единственными объектами, которые создаются, являются SqlDataReaders, и они находятся в структуре Using. Добавление System.GC.Collect () не дало никаких результатов.
БД - это сайт SqlServer на том же ноутбуке.
В Форме нет причудливых штуковин или гаджетов.
Мне ничего не известно об этом процессе, который сильно отличается от того, что я делал десятки раз раньше. Я уже видел эту ошибку раньше, но никогда на постоянной основе.
Есть идеи, кто-нибудь?
Полная ошибка Текст:
CLR не удалось перейти из контекста COM 0x1a0b88 в контекст COM 0x1a0cf8 в течение 60 секунд. Поток, которому принадлежит целевой контекст / квартира, скорее всего, либо делает ожидание без перекачки, либо обрабатывает очень длительную операцию без перекачки сообщений Windows. Эта ситуация, как правило, оказывает негативное влияние на производительность и может даже привести к тому, что приложение перестает отвечать на запросы или использование памяти постоянно увеличивается с течением времени. Чтобы избежать этой проблемы, все потоки однопоточных квартир (STA) должны использовать примитивы перекачки (такие как CoWaitForMultipleHandles) и регулярно перекачивать сообщения во время длительных операций.