CLR не удалось перейти из COM-контекста

Автор Тема: CLR не удалось перейти из COM-контекста  (Прочитано 3285 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн PuSTaMАвтор темы

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Доброго всем времени суток.
Заранее прошу прощения, если эта тема где-то есть (я честно искал, но не нашел) или тема вопроса на столько очевидна, что в приличном обществе о таком не спрашивают (я недавно в разработке, некоторые вопросы ещё ставят меня в тупик).

Есть программа, которая обрабатывает большое количество примитивов, при запуске в режиме отладки, через минуту после старта получаю ошибку с таким текстом:
Цитировать
"Помощник по отладке управляемого кода "ContextSwitchDeadlock" : "CLR не удалось перейти из COM-контекста 0x75920408 в COM-контекст 0x759201b8 за 60 секунд. Наиболее вероятно, что поток, владеющий контекстом/апартаментом назначения, находится в режиме ожидания или выполнения очень длительной операции без прокачки сообщений Windows. Обычно эта ситуация отрицательно влияет на производительность и даже может привести к зависанию приложения или чрезмерному расходованию памяти. Чтобы избежать этой проблемы, все потоки однопоточного апартамента (STA) должны использовать примитивы ожидания для прокачки (например, CoWaitForMultipleHandles) и периодически прокачивать сообщения во время длительных операций."
На просторах интернета прочитал что это из-за того что выполняется большой объем вычислений, что не дает доступа к интерфейсу программы (и это действительно так), и если в коде действительно предусмотрен большой объем вычислений, то нужно просто выключить это оповещение.


После выключения этого оповещения программа работает как от неё ожидается, но я понятия не имею к чему может привести игнорирование этого оповещения. Может стоит количество обрабатываемых объектов дозировать, что бы они обрабатывались порционно или это и правда можно игнорировать?
Прошу совета у более опытных разработчиков, что делать в таких ситуациях

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63
Не используй COM, используй NET API

Оффлайн PuSTaMАвтор темы

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Я и использую .NET API. Иначе зачем мне создавать тему в этой ветке?


Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Off-Topic: показать
На всякий случай - AutoCAD не очень хорошо дружит с многопоточностью, насколько мне известно.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!