Question de performance avancée ici. Voici mon scénario:XSLT, ReBase et NGEN précompilés
J'ai une base de données qui contient des milliers de documents XSLT. Un pour chaque page d'un site Web afin que ceux-ci traduisent XML en HTML. Un serveur Web ASP.NET (batterie de serveurs) charge les documents XSLT à partir de la base de données et les utilise pour afficher du code HTML pour chaque requête Web.
J'ai implémenté l'optimisation de l'utilisation de XslCompiledTransform et la mise en cache entre les rafraîchissements de base de données (toutes les 30 minutes). Je cherche à entailler les performances plus loin en précompilant le XSLT en DLL avec xsltc.exe. Ceci est censé éliminer toutes les invocations de méthodes dynamiques créées par XslCompiledTransform. J'ai donc un serveur séparé qui écrit les fichiers XSLT dans les fichiers et les exécute avec xsltc.exe. Prend environ 20 minutes mais c'est OK. Je dépose ensuite les DLL sur chaque serveur Web. Maintenant, je peux juste que le serveur web charge dynamiquement les DLL au besoin. Voici le code que je utilise pour charger l'ensemble dans 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 Je Rebase.exe les DLL dans le répertoire et/ou les Ngen.exe? ReBase prend environ 5 minutes et NGEN.exe avec/queue prend environ 10 minutes au cours desquelles le CPU est frappé durement - ce qui a probablement un impact sur la fonction de traitement du trafic du serveur web. Étant donné que je charge l'assemblage en lisant des octets à partir de l'assemblage, l'image NGEN native sera-t-elle référencée ou le JIT sera-t-il déclenché de toute façon?
Un aperçu de tout ceci sera BEAUCOUP apprécié!
malcolm