Когда следует изменить значение «Создать сборку сериализации»? - PullRequest
34 голосов
/ 08 февраля 2012

У меня есть клиентское приложение winform, которое подключается к локальному сетевому серверу WCF. На стороне клиента возникла проблема с производительностью, и я искал решение и нашел эту запись.

Там сказано, что:

Похоже, что сериализационные сборки создаются во время выполнения. Пытаться изменение настроек раскрывающегося списка Сборка сериализации внизу панели Build окна свойств для проекта.

У меня вопрос Когда нужно изменить значение Generate Serialization Assembly и на какое значение его следует изменить, чтобы повысить производительность моего клиентского приложения?

Мои коды в C #, framework 4, встроенный в VS2010Pro.

1 Ответ

54 голосов
/ 08 февраля 2012

Для сериализации классов / структур необходимо генерировать сборки сериализации. Это может произойти во время компиляции или во время выполнения. Sgen.exe используется для генерации сборок сериализации во время компиляции; Visual Studio может дополнительно автоматизировать этот процесс, как вы обнаружили.

  • Выкл. : по умолчанию для конфигурации отладки (спасибо, @ Alexandru Lache ). Не генерируйте сборки сериализации во время компиляции. Сборки сериализации будут создаваться при каждом запуске приложения в соответствии с MSDN :

    Когда генератор XML Serializer Generator не используется, XmlSerializer генерирует код сериализации и сборку сериализации для каждого типа при каждом запуске приложения. Чтобы повысить производительность запуска сериализации XML, используйте инструмент Sgen.exe, чтобы заранее сгенерировать эти сборки. Затем эти сборки могут быть развернуты вместе с приложением.

  • Вкл. : Используйте Sgen.exe для генерации сборки сериализации во время компиляции. Это экономит время запуска, но увеличивает размер развертывания.
  • Авто : по умолчанию для конфигураций выпуска. Официально, генерирует сборку, только если в вашем коде используется XmlSerializer, за MSDN (спасибо, @ L-Three ). В моих тестах это не всегда работало, поэтому я рекомендую явно установить его на On, если вы используете XmlSerializer.

Итак, мой ответ будет таким: если вас беспокоит время запуска, и вы используете атрибут Serializable хотя бы один раз, установите для этого параметра значение Вкл. Если вас больше беспокоит размер развертывания, измените его на Off. Я никогда не оставляю это на Авто больше, потому что я не доверяю этому. Как я уже сказал, похоже, что он выключен, но я бы на это не рассчитывал.

Редактировать: У меня определенно возникают проблемы с различением между Выкл. И Авто. Разница не четко определена нигде. Я бы добавил On, если вы вообще используете атрибут Serializable, и Off, если вы этого не сделаете. Я бы не принял во внимание размер развертывания или время запуска. Кажется, я просто сталкиваюсь с меньшим количеством ошибок, связанных с сериализацией, если придерживаюсь этого правила.

Обновление:

После обзора упомянутых источников я полагаю, что «запуск» относится к тому случаю, когда XmlSerializer используется в любом данном типе, а не при первоначальном запуске приложения. Я не могу быть уверен; это немного двусмысленно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...