Вот ситуация:
Приложение Silverlight 3 обращается к службе WCF, размещенной на asp.net, чтобы получить список элементов для отображения в сетке. Как только список передается клиенту, он кэшируется в IsolatedStorage. Это делается с помощью DataContractSerializer для сериализации всех этих объектов в поток, который затем архивируется и затем шифруется. Когда приложение перезапускается, оно сначала загружается из кэша (в обратном порядке) и десериализует объекты с помощью метода DataContractSerializer.ReadObject (). До недавнего времени все это прекрасно работало при всех сценариях, когда весь путь «загрузки из кэша» (расшифровывать / разархивировать / десериализовать) занимал не более сотен миллисекунд.
На некоторых машинах разработки, но не на всех (на всех машинах Windows 7) процесс десериализации - то есть вызов ReadObject (stream) занимает несколько минут и кажется блокирует всю машину, НО ТОЛЬКО ПРИ РАБОТЕ В ОТЛАДЧИКЕ в VS2008. Запуск кода конфигурации Debug вне отладчика не вызывает проблем.
Одна вещь, которая кажется подозрительной, состоит в том, что при включении остановки при исключениях вы можете видеть, что ReadObject () выдает много-много исключений System.FormatException, указывающих на то, что число имеет неправильный формат. Когда я отключаю «Просто мой код», тысячи из них выводятся на экран. Никто не останется без внимания. Это происходит как при обратном чтении из кэша, так и при десериализации при завершении вызова веб-службы для получения данных из службы WCF. ОДНАКО, такие же исключения происходят на моей машине для разработки ноутбуков, которая вообще не испытывает медлительности. И FWIW, мой ноутбук действительно старый, а мой рабочий стол - 4-ядерный, 6 ГБ ОЗУ.
Опять же, нет проблем, если только он не работает под отладчиком в VS2008. Кому-нибудь еще кажется это? Есть мысли?
Вот ссылка на сообщение об ошибке: https://connect.microsoft.com/VisualStudio/feedback/details/539609/very-slow-performance-deserializing-using-datacontractserializer-in-a-silverlight-application-only-in-debugger
РЕДАКТИРОВАТЬ: Теперь я знаю, откуда берутся исключения FormatException. Кажется, что они «по замыслу» - они происходят, когда у меня есть сериализируемые double, которые являются double.NaN, так что этот XML выглядит как NaN ... Кажется, что DCS пытается проанализировать значение как число, что не удается с исключением, а затем он ищет "NaN" et. и др. и обрабатывает их. Моя проблема не в том, что это не работает ... оно работает ... просто оно полностью калечит отладчик. Кто-нибудь знает, как настроить отладчик / vs2008sp1 для более эффективной обработки.