Подтвердить что ты не робот

Когда необходимо изменить значение "Сгенерировать сериализацию"?

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

Там говорится:

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

Мой вопрос Когда нужно изменить значение Assembly Generation Serialization Assembly и какое значение следует изменить для повышения производительности моего клиентского приложения?

Мои коды находятся в С#, фреймворке 4, в VS2010Pro.

4b9b3361

Ответ 1

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

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

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

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

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

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

Обновление:

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