2016-06-22 2 views
0

Наше приложение C# отлично работает в исполняемом файле, но в режиме отладки оно не будет реагировать, и мы должны остановить программу через меню отладки.Как справиться с длинным исполнением в режиме отладки визуальной студии?

После расследования было обнаружено, что при выполнении следующего утверждения нет возврата, если json содержит очень большой объект json.

jsonString = Json.Encode(json); 

Мы используем System.Web.Helpers.Json для кодирования объекта JSON, при получении большого объекта, то это вызовет тайм-аут в режиме отладки. Мы попытались добавить часы для Json.Encode (json), он вернет «Время ожидания оценки».

Хотя это не вызовет никаких проблем в нашей производственной версии, но у него есть проблемы при отладке приложения, поскольку приложение зависает при выполнении этого оператора.

Мы также обнаружили, что эта проблема возникла только на машине Windows 7, и в Windows 10 нет проблем. Поэтому мы должны использовать машину Windows 10 для отладки.

Похоже, что существует ограничение в режиме отладки в Windows 7, которое не допускает такой длинный оператор выполнения. Могу ли я узнать, есть ли способ настроить такой тайм-аут в режиме отладки?

+0

- это то, что конкретная строка кода выполняется в другой теме? – Rahul

+0

Выполняется в потоке пользовательского интерфейса. Нашим основным использованием является сохранение всех текущих данных при выходе из приложения. –

+0

Также, это происходит на * all * win7 машинах или только на одном из них? (просто пытаюсь установить, является ли это специфичным для ОС или более экологичным на этом ПК) – NPras

ответ

0

Спасибо, NPras.

Хотя мы сейчас используем Visual Studio 2015, и там нет записи «LocalsTimeout» в разделе «HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 14.0 \ Debugger \».

Но проблему можно решить, изменив настройку «LocalsTimeout» в разделе «HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 12.0 \ Debugger \».

Кажется, что этот параметр используется в разных версиях.

КОРРЕКЦИЯ: - Действительно интересный, он работает только один раз. Может быть, после того, как я изменю настройку, json недостаточно большой для моего тестирования. - Я снова проверил, до сих пор нет возврата. - Я увеличил значение до 10000, кажется невозможным, что ему нужно 10 секунд для обработки, но до сих пор нет возврата.

+0

Интересно, проблема в самом System.Web. Вы пробовали 'Newtonjoft.Json'? – NPras

+0

Нужно изучить, как преобразовать программу в использование Newtonsoft.Json, так как она не обеспечивает такую ​​же функцию, как в System.Web.Helper. Но я тестировал снова и снова, и я обнаружил, что для исполняемого файла требуется менее 1 секунды, а для преобразования одного и того же объекта в режим отладки требуется более 20 секунд. –

1

Спасибо, NPras, вы правы. Проблема заключается только в json только System.Web.Helper. Я просто пытаюсь изменить один из медленного кода преобразования и выполнить следующие два оператора в режиме отладки,

string jsonString = Json.Encode (json);

строка json2 = Newtonsoft.Json.JsonConvert.SerializeObject (json);

Выходная строка имеет около 33K, первая занимает более 20 секунд, а вторая - в 1 с, и результат идентичен.

И еще одно обнаружение, такая низкая производительность в System.Web.Helper произошла только в коде, запущенном в фоновом потоке. Для тех, кто работает в потоке пользовательского интерфейса, он имеет ту же производительность, что и исполняемый файл. Возможно, во время режима отладки он ждет кого-то в потоке пользовательского интерфейса, который блокируется средой Visual Studio IDE.

Смежные вопросы