Сборка сериализации. Это нужно или нет? - PullRequest
19 голосов
/ 29 мая 2009

У меня есть приложение .net 2.0 c # ClickOnce, и оно подключается к своим данным через веб-службы. Мне сказали, что один из способов ускорить приложение - это заранее создать сборку сериализации. У меня есть несколько вопросов по этому вопросу.

  1. Настройка по умолчанию для создания сборки сериализации - Авто. Какие критерии использует VS2005, чтобы решить, создавать ли сборку сериализации или нет? Похоже, что он не генерируется в конфигурации отладки, но в конфигурации выпуска, но я не могу сказать точно и не могу информацию никуда.

  2. Улучшает ли сборка сериализации запуск приложения? В частности, что это улучшает? Нужна ли сборка сериализации?

Ответы [ 4 ]

14 голосов
/ 29 мая 2009

Это действительно вопрос "Должен ли я предварительно сгенерировать сборки сериализации и включить их в развернутый проект, или я прибегну к стандартному созданию сборок на лету?" Как правило, это не повредит слишком сильно после первого попадания. В чем он может играть, так это в том, что сборки сериализации генерируются в %SYSTEMROOT%\TEMP. К которому в некоторых случаях процесс не может получить доступ, что в большинстве случаев приводит к фатальным исключениям.

6 голосов
/ 29 мая 2009

Это не относится к вашей ситуации, но есть еще одна веская причина для предварительной генерации сборки сериализации - это необходимо при размещении вашего кода в SQL Server (т.е. SQLCLR). SQL Server не позволяет динамически генерировать эти сборки, поэтому ваш код сериализации не будет работать внутри SQL Server.

4 голосов
/ 29 мая 2009

В большинстве случаев вы вряд ли увидите огромную выгоду от этого, особенно если вы некоторое время оставляете приложение открытым. Предварительная генерация сборки сериализации в основном помогает в первый раз (в жизни exe) сериализовать определенный тип как xml.

1 голос
/ 17 февраля 2012

Согласно Intellitrace, только при первой сериализации XML-типа тип FileNotFoundException генерируется, а затем перехватывается. Это означает, что CLR ожидает загрузки сборки, содержащей все XML-сериализаторы для этой конкретной сборки, и, когда она не найдена, выдается исключение FileNotFoundException, которое сигнализирует XmlSerializer: «Эй! Генерация чертовой сборки!» и это то, что происходит во время этого «Поймать», а затем существует ранее не найденный файл.

Я где-то читал, что использование try-catch для логики - плохое упражнение. ИДК, почему Microsoft использовала этот подход ...

...