2010-11-19 7 views
2

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

Répondre

0

Wow!

Assembly.Load(string)est-ce que permet de charger des images natives. Cependant, je soupçonne que la surcharge qui prend un tableau d'octets ne peut pas l'utiliser. Je ne peux pas trouver de référence pour cela, mais peut-être que certaines expérimentations utilisant le Assembly Binding Log Viewer sur un projet de test pourraient se révéler dans les deux cas.

Vous devez également vous assurer que vos assemblys sont fortement nommés pour l'image native à utiliser. En ce qui concerne le rebasing, this blog suggère qu'il n'est pas requis sur les systèmes d'exploitation de génération Vista ou plus tard.