Для сериализации классов / структур необходимо генерировать сборки сериализации. Это может произойти во время компиляции или во время выполнения. 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
используется в любом данном типе, а не при первоначальном запуске приложения. Я не могу быть уверен; это немного двусмысленно.