不幸的是,我正在开发一个使用XSL的网站。性能可怕。在JIT上花费的时间就像是30%!
我总是认为这家公司需要4台服务器来运行它的小站点是由XSL决定的,但我终于做了一个正确的性能评估,虽然XSL完全是罪魁祸首,但我怀疑XSL不是应该是这么糟糕,原来的程序员(谁是JavaScript人员)误用了XslCompiledTransform
类型。
问题是,我自己无法更好地使用此API。该类已针对.NET 2.0进行了更新,其中包含了编译缓存。我花了一整天时间试图解决缓存工作的问题;最初为每个转换创建一个XslCompiledTransform
的代码,这似乎不对,但是使其静态也无济于事 - 性能分析显示没有改进。
此外,在调试器输出窗格中,我可以看到Loaded 'System.Xml.Xsl.CompiledQuery.5'
弹出相同的样式表,所以它看起来像是在编译,每次都会重新加载。
我突然想到可能我应该进行缓存,即我应该为每个样式表保留一个这样的XslCompiledTransform
个实例,预加载或延迟加载。< / p>
这是对的吗?保留一个实例并为每个样式表多次调用Load
是不正确的?
答案 0 :(得分:2)
编译样式表通常比运行样式表要长得多。您应该编译一次样式表,并重用CompiledStylesheet对象来运行每个转换。
(感谢John Nicholas建议使用Saxon,我衷心赞同这一点,但这与这个问题并不相关,因为Saxon API可能会被轻易滥用。)
答案 1 :(得分:0)