ContextSwitchDeadlock был обнаружен - PullRequest
3 голосов
/ 01 марта 2012

Я выполняю что-то похожее на следующий код в режиме отладки:

for (int i = 0; i < 5000; i++)
{
   for (int j = 0; j < 10; j++)
   {
     DoSomething();
   }
}

Время от времени я получаю сообщение "ContextSwitchDeadlock был обнаружен" от VS 2010. Кажется, что производительность снижается с меньшим объемом доступной оперативной памяти,У меня есть 8 ГБ, и я могу запустить программу примерно за 8 минут (после того, как циклы выполнены, МНОГИЕ попаданий в БД, так что 8 минут - это не время цикла), на машинах 4 ГБ время удваивается!Из того, что я красный, MDA запускается, потому что мой цикл работает дольше 60 секунд.По сути, это предупреждение о том, что код полностью блокирует приложение.

Что я могу сделать, чтобы избежать этих ситуаций и повысить скорость?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 01 марта 2012

Вы можете игнорировать это исключение (я сталкивался с этим перед собой для длительных методов)

  1. Удерживать ctrl+alt+e
  2. Нажмите Find
  3. Введите ContextSwitchDeadlock и нажмите Enter
  4. Снимите отметку Thrown в таблице
  5. Закройте окно конфигурации Exceptions, нажав OK
0 голосов
/ 01 марта 2012

Если вас беспокоит скорость и производительность, почему бы не использовать интерфейс IEnumerator.

...