Вот такая ситуация:
Приложение Silverlight 3 обращается к службе WCF, размещенной на asp.net, чтобы получить список элементов для отображения в сетке. Когда список передается клиенту, он кэшируется в изолированном хранилище. Это делается с помощью DataContractSerializer для сериализации всех этих объектов в поток, который затем архивируется и затем шифруется. Когда приложение перезапускается, оно сначала загружается из кеша (в обратном порядке) и десериализует объекты с помощью метода DataContractSerializer.ReadObject (). Все это прекрасно работало во всех сценариях до недавнего времени, при этом весь путь «загрузка из кеша» (расшифровка / распаковка / десериализация) занимал не более сотен миллисекунд.
На некоторых машинах разработки, но не на всех (все машины с Windows 7) процесс десериализации - то есть вызов ReadObject (stream) занимает несколько минут и, кажется, блокирует всю машину, НО ТОЛЬКО ПРИ ЗАПУСКЕ В ОТЛАДЧИКЕ в VS2008. Выполнение кода конфигурации отладки вне отладчика не вызывает проблем.
Одна вещь, которая кажется подозрительной, заключается в том, что когда вы включаете остановку для исключений, вы можете видеть, что ReadObject () выдает много-много исключений System.FormatException, указывающих, что число было в неправильном формате. Когда я выключаю «Just My Code», тысячи таких сообщений выводятся на экран. Ни один не остается без присмотра. Это происходит как при обратном чтении из кеша, так и при десериализации по завершении вызова веб-службы для получения данных из службы 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
РЕДАКТИРОВАТЬ: теперь я знаю, откуда берутся исключения FormatExceptions. Кажется, что они созданы «по замыслу» - они возникают, когда у меня сериализуются двойники, которые являются double.NaN, так что этот xml выглядит как NaN ... Кажется, что DCS пытается проанализировать значение как число, но это не удается. за исключением, а затем ищет "NaN" и т. д. al. и обрабатывает их. Моя проблема не в том, что это не работает ... это работает ... просто это полностью калечит отладчик. Кто-нибудь знает, как настроить отладчик / vs2008sp1, чтобы справиться с этим более эффективно.