2010-11-19 10 views
2

Продвинутый вопрос о производительности здесь. Вот мой сценарий:Предварительно скомпилированный 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); 

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

Любое понимание этого будет ОБЯЗАТЕЛЬНО оценено!

malcolm

ответ

0

Wow!

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

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

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