Я отримував повідомлення про помилку, яке не можу вирішити. Він походить від Visual Studio або налагоджувача. Я не впевнений, чи є кінцева помилка у VS, відладчику, моїй програмі чи базі даних.
Це додаток для Windows. Не веб-додаток.
Перше повідомлення від VS - це спливаюче вікно, яке говорить: "Ніякі символи не завантажуються для жодного кадру стека викликів. Вихідний код не може бути відображений". Коли це натискається, я отримую: " ContextSwitchDeadlock було виявлено ", а також довге повідомлення, відтворене нижче.
Помилка виникає в циклі, який сканує таблицю даних. Для кожного рядка використовується ключове (HIC #) значення з таблиці як параметр для SqlCommand. Команда використовується для створення SqlDataReader, який повертає один рядок. Дані порівнюються Якщо виявлена помилка, рядок додається до другої таблиці даних.
Здається, помилка пов’язана з тим, як триває процедура (тобто через 60 сек), а не скільки помилок. Я не думаю, що це питання пам’яті. В циклі не оголошено змінних. Єдині об'єкти, які створюються, - це SqlDataReaders, і вони знаходяться у використанні структур. Додати System.GC.Collect () не вплинуло.
Db є сайтом SqlServer на тому ж ноутбуці.
У Формі немає фантазійних штучок чи гаджетів.
Мені нічого не відомо в цій програмі, що сильно відрізняється від того, що я робив десятки разів раніше. Я бачив помилку раніше, але ніколи на постійній основі.
Будь-які ідеї, хтось?
Текст повної помилки: CLR не вдалося перейти з контексту COM 0x1a0b88 в контекст COM 0x1a0cf8 протягом 60 секунд. Потік, який належить контексту / квартирі призначення, швидше за все, або виконує неперекачувальне очікування, або обробляє дуже тривалу операцію без накачування повідомлень Windows. Ця ситуація, як правило, негативно впливає на ефективність роботи і навіть може призвести до того, що додаток стає невідповідним або споживання пам’яті постійно накопичується. Щоб уникнути цієї проблеми, всі потоки однопоточних квартир (STA) повинні використовувати накачування примітивів очікування (наприклад, CoWaitForMultipleHandles) і регулярно перекачувати повідомлення під час тривалих операцій.