Расширенный вопрос производительности здесь. Вот мой сценарий:
У меня есть база данных, которая содержит тысячи документов 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 все равно будет запущен?
Любое / все понимание этого будет ЦЕННО оценено!
Малкольм