Сериализация. Нужно это или нет?
У меня есть приложение .net 2.0 С# ClickOnce и оно подключается к его данным через веб-службы. Мне сказали, что одним из способов потенциального ускорения приложения является создание сборки сериализации заранее. У меня есть несколько вопросов на этом фронте.
-
Значение по умолчанию для создания сборки сериализации - это Auto. Какие критерии использует VS2005, чтобы решить, создавать ли сериализацию или нет? Похоже, что он не генерируется в конфигурации Debug, но он работает в разделе "Конфигурация Release", но я не могу точно сказать и не могу получить информацию в любом месте.
-
Действительно ли сборка сериализации действительно улучшает запуск приложения? В частности, что это улучшает? Мне действительно нужна сборка сериализации?
Ответы
Ответ 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 использовала этот подход...