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

Сериализация. Нужно это или нет?

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

  • Значение по умолчанию для создания сборки сериализации - это Auto. Какие критерии использует VS2005, чтобы решить, создавать ли сериализацию или нет? Похоже, что он не генерируется в конфигурации Debug, но он работает в разделе "Конфигурация Release", но я не могу точно сказать и не могу получить информацию в любом месте.

  • Действительно ли сборка сериализации действительно улучшает запуск приложения? В частности, что это улучшает? Мне действительно нужна сборка сериализации?

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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