使用XslCompiledTransform的正确方法是什么?

时间:2013-09-04 15:40:05

标签: c# asp.net xml xslt

不幸的是,我正在开发一个使用XSL的网站。性能可怕。在JIT上花费的时间就像是30%!

我总是认为这家公司需要4台服务器来运行它的小站点是由XSL决定的,但我终于做了一个正确的性能评估,虽然XSL完全是罪魁祸首,但我怀疑XSL不是应该是这么糟糕,原来的程序员(谁是JavaScript人员)误用了XslCompiledTransform类型。

问题是,我自己无法更好地使用此API。该类已针对.NET 2.0进行了更新,其中包含了编译缓存。我花了一整天时间试图解决缓存工作的问题;最初为每个转换创建一个XslCompiledTransform的代码,这似乎不对,但是使其静态也无济于事 - 性能分析显示没有改进。

此外,在调试器输出窗格中,我可以看到Loaded 'System.Xml.Xsl.CompiledQuery.5'弹出相同的样式表,所以它看起来像是在编译,每次都会重新加载。

我突然想到可能我应该进行缓存,即我应该为每个样式表保留一个这样的XslCompiledTransform个实例,预加载或延迟加载。< / p>

这是对的吗?保留一个实例并为每个样式表多次调用Load是不正确的?

2 个答案:

答案 0 :(得分:2)

编译样式表通常比运行样式表要长得多。您应该编译一次样式表,并重用CompiledStylesheet对象来运行每个转换。

(感谢John Nicholas建议使用Saxon,我衷心赞同这一点,但这与这个问题并不相关,因为Saxon API可能会被轻易滥用。)

答案 1 :(得分:0)

作为一个c#dev id,建议你去xxlt的撒克逊路线。

http://saxon.sourceforge.net/

xpath的ms实现,如果已过期。它也不是那么快。