Предварительно скомпилированные XSLT, ReBase и NGEN

Расширенный вопрос производительности здесь. Вот мой сценарий:

У меня есть база данных, содержащая тысячи документов XSLT. По одному на каждую страницу веб-сайта, чтобы они переводили XML в HTML. Веб-сервер ASP.NET (ферма) загружает документы XSLT из базы данных и использует их для визуализации HTML для каждого веб-запроса.

Я реализовал оптимизацию использования XslCompiledTransform и кэширования между обновлениями базы данных (каждые 30 минут). Я собираюсь еще больше повысить производительность, предварительно скомпилировав XSLT в библиотеки DLL с помощью xsltc.exe. Предполагается, что это устранит все вызовы динамических методов, которые создает XslCompiledTransform.

Итак, у меня есть отдельный сервер, записывающий XSLT в файлы и запускающий их с помощью xsltc.exe. Занимает около 20 минут, но это нормально. Затем я загружаю библиотеки DLL на каждый веб-сервер. Теперь я могу просто заставить веб-сервер динамически загружать библиотеки DLL по мере необходимости. Вот код, который я использую для загрузки сборки в XslCompiledTransform:

byte[] bytes = File.ReadAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XsltDlls\\" + fileName + ".dll"));
Assembly assembly = Assembly.Load(bytes);
Type type = assembly.GetType(fileName);
XslCompiledTransform compiledTransform = new XslCompiledTransform();
compiledTransform.Load(type);

Должен ли я ReBase.exe библиотеки DLL в каталоге и/или NGEN.exe их? ReBase занимает около 5 минут, а NGEN.exe с /queue займет около 10 минут, в течение которых ЦП сильно страдает, что, вероятно, оказывает влияние на функцию обслуживания трафика веб-сервера. Учитывая, как я загружаю сборку, читая байты из сборки, будет ли вообще ссылаться на собственное изображение NGEN или JIT все равно запустится?

Любое/все понимание этого будет ОЧЕНЬ оценено!

Малькольм


person motormal    schedule 19.11.2010    source источник


Ответы (1)


Вау!

Assembly.Load(string) разрешает собственные изображения для загрузки. Однако я подозреваю, что перегрузка, которая принимает массив байтов, может его не использовать. Я не могу найти ссылку на это, но, возможно, какие-то эксперименты с использованием Журнала привязки сборки Viewer в тестовом проекте может оказаться в любом случае.

Вы также должны убедиться, что ваши сборки имеют строгое имя для используемого собственного образа.

Что касается перебазирования, в этом блоге предполагается, что это не требуется для ОС поколения Vista или более поздних версий.

person Olly    schedule 11.04.2012