Слишком много динамических сборок - PullRequest
7 голосов
/ 13 июня 2011

Я пытаюсь использовать механизм представления Razor в качестве общего механизма создания шаблонов, поддерживаемого базой данных.
http://razorengine.codeplex.com/ Проблема в том, что для каждой компиляции шаблона создается и загружается новая динамическая сборка. Поскольку нет способа выгрузить сборку из текущего домена приложения и нет возможности использовать отдельный домен приложения для системы шаблонов (использование анонимных типов), эти сборки будут накапливаться до тех пор, пока домен приложения не будет уничтожен. Сами шаблоны будут меняться на регулярной основе, что приведет к большему количеству перекомпиляций.

Вопрос в том, повлияют ли эти динамические сборки (потенциально тысячи) на производительность домена приложения? Или, альтернативно, есть лучший способ сделать это?

1 Ответ

1 голос
/ 14 июня 2011

Как правило, наличие множества небольших сборок, загружаемых в AppDomain, не должно вызывать особого беспокойства. Единственное общее утверждение, которое может сделать каждый, - это измерить фактическую производительность приложения в соответствующих сценариях, а затем посмотреть, имеет ли это значение.

ASP.NET имеет некоторое автоматическое управление жизненным циклом приложения, которое перезапускает домен приложения после определенных событий. Например, если в приложении слишком много перекомпиляций, ASP.NET автоматически перезапустит приложение. Это означает, что все ранее загруженные сборки будут очищены, и вы начнете с нуля.

См. MSDN для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/s10awwz0.aspx

numRecompilesBeforeAppRestart

Необязательный атрибут Int32.

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

Примечание

ASP.NET увеличивает свойство NumRecompilesBeforeAppRestart каждый раз, когда сборка становится недействительной и не удаляется.

По умолчанию установлено значение 15.

...