XsltCompiledTransform在第一次转换时速度较慢-未记录的行为

本文关键字:记录 第一次 转换 速度 XsltCompiledTransform | 更新日期: 2023-09-27 18:20:02

我们有一个相对复杂的XSLT文件。

.NET版本为3.5-MVC 2应用程序在IIS7.5 中运行

当我们做XsltCompiledTransform.Transform时,第一次大约需要一分钟。无论输入的XML是什么样子,在以后的所有时间里都只需要不到一秒钟的时间。

如果我们不将初始Transform放在一个新线程中,它将得到一个StackOverflowException,所以我们总是在新线程中这样做。XsltCompiledTransform对象是一个静态对象,因此我们不会每次执行Transform时都重新创建它。

据我所知,MSDN中没有任何地方记录这种行为。文档规定使用xsltc.exe编译XSLT(我们这样做了),这样在调用Load方法时就不会花很多时间编译XSLT,因为它已经编译好了。不幸的是,当我们调用Load时,这并没有提高性能,而且无论我们是加载XSLT文本还是加载程序集,第一次转换都需要一分钟的时间,所有后续转换都非常快。

不幸的是,这需要我们在启动时对一段非常简单的XML文本进行"伪"转换,这样第一个用户就不会经历一分钟的转换延迟。

转换是相当大的XML片段,但这对转换时间没有任何影响。如果XML是1500KB(典型)或小于1KB(就像我们的只有一个XML标记的伪转换一样),那么执行第一个转换大约需要1分钟。

有人经历过这样的事情吗?任何关于如何解决这一问题的想法似乎都是无证行为。

XsltCompiledTransform在第一次转换时速度较慢-未记录的行为

检查网站是否有任何流量,特别是从W3C网站获取DTD或类似文件的流量-他们故意"节流"这些请求,以鼓励人们维护本地副本。