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