高级性能问题在这里。这是我的场景:
我有一个包含数千个 XSLT 文档的数据库。一个用于网站的每个页面,因此这些将 XML 转换为 HTML。ASP.NET Web 服务器(场)从数据库加载 XSLT 文档,并使用它们为每个 Web 请求呈现 HTML。
我已经实现了使用 XslCompiledTransform 的优化并在数据库刷新之间缓存它(每 30 分钟)。我希望通过使用 xsltc.exe 将 XSLT 预编译为 DLL 来进一步提高性能。这应该消除 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 分钟,而带有 /queue 的 NGEN.exe 大约需要 10 分钟,在此期间 CPU 会受到重击 - 可能会影响网络服务器的流量服务功能。考虑到我如何通过从程序集中读取字节来加载程序集,是否会引用本机 NGEN 图像,或者 JIT 是否会启动?
对此的任何/所有见解将不胜感激!
马尔科姆