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