3

我正在尝试对 XSLT 的两个版本进行基准测试。目前我使用 Visual Studio 来调试从 .NET 组件调用的 xml 转换。VS 2010 是我用于开发的 IDE。

我得到的唯一线索是来自输出窗口(下面是一个例子):

样式表加载时间:656.2 毫秒
样式表 JIT 时间:11.18 毫秒
样式表执行时间:177.8 毫秒

我相信我只需要为“样式表执行时间”而烦恼,但不确定这些值是否确实反映了 XSL 的实际能力,因为每次运行似乎都在不断变化。

我想知道是否有可靠的方法来对 XSL 进行基准测试。任何分享使用 .NET 运行时对 XSL 进行基准测试的实践经验都会有所帮助。

4

3 回答 3

3

这个问题之前在 stackoverflow 中被问过,您可以在此处查看原始问题:How do I profile and optimize an XSLT?

以下是已接受答案的片段:

您使用的是哪个 XSLT 引擎?如果您使用的是 .NET 引擎和 Visual Studio,您可以使用集成到 Visual Studio 中的 XSLT 分析器,这非常有用。

其他优秀的分析工具是 Altova 的 XML Spy 和 Oxygen。

如果您发布您的 XSLT,则更容易告诉您可能的瓶颈在哪里。通常要小心 XPath 表达式,例如 '//'、previous::* 和 following::*。更多规则和最佳实践:

  1. 避免重复使用"//item".
  2. 不要多次评估同一个节点集;将其保存在变量中。
  3. <xsl:number>如果可以,请避免。例如,通过使用 position()。
  4. 例如,使用<xsl:key>来解决分组问题。
  5. 避免模​​板规则中的复杂模式。相反,在规则内使用。
  6. preceding[-sibling]使用或 following[-sibling]轴时要小心。这通常表示具有 n 平方性能的算法。
  7. 不要对同一个节点集进行多次排序。如有必要,将其保存为结果树片段并使用node-set()扩展功能访问它。
  8. 要输出简单#PCDATA元素 的文本值,<xsl:value-of>请优先 使用<xsl:apply-templates>.

(来自[ http://www.dpawson.co.uk/xsl/sect4/N9883.html#d15756e150][4]

最初来自:https ://stackoverflow.com/users/40347/0xa3

我会确保在运行之前编译您可以调用的 XSLT,这样您就不会从每次发生的编译过程中获得混合指标。

您可以使用 XslCompiledTransform 类来确保在运行之前编译 XSLT。非常重要的是,您不要丢弃它并在每次再次创建对象时以其他方式重用转换,它将重新编译并花费随机时间来完成它。

这里有一篇有趣的文章:http: //www.windowsdevcenter.com/pub/a/dotnet/2003/07/14/xsltperf.html称为 XSLT Performance in .NET

它继续将 .Net 中的 XSLT 转换基准测试到其他 xslt 引擎。

我使用 XSLT 的经验是速度非常快,除非将自定义函数添加到转换中,例如。调用不是高性能的自定义代码通常是小型到中型的工作表应该运行得非常快,特别是你没有很多导入和函数调用。

如果您真的很担心,有一篇来自 MSDN Enterprise Patterns and Practices 的精彩文章,其中有一节介绍了 XML 和 XSLT 转换的性能。

文章在这里:http: //msdn.microsoft.com/en-us/library/ff649152.aspx

我正在谈论的部分在这里:http: //msdn.microsoft.com/en-us/library/ff647804.aspx

Microsoft 发表了一篇关于 Benchmarking XSLT 的文章,读起来很有趣。 http://blogs.msdn.com/b/antosha/archive/2006/07/24/xslcompiledtransform-performance-beating-msxml-4-0.aspx

还有一种方法可以将样式表预编译成代码,这样 xslt 转换只会被加载而不被解析。

您可以在此处找到相关信息:(在 .NET 中使用预编译 XSLT)http://my-tech-talk.blogspot.co.uk/2009/03/using-precompiled-xslt-in-net.html

于 2014-07-15T21:52:53.173 回答
1

您可能想查看我们(Michael Kay 和 Debbie Lockett)最近在 XML London 上发表的论文,请参阅

http://xmllondon.com/2014/xmllondon-2014-proceedings.pdf

它描述了在对 XSLT 性能进行基准测试时出现的一些陷阱。另请参阅 Github 上的项目

https://github.com/Saxonica/XT-Speedo

要获得可重复的结果,必须重复运行转换并取平均值。

于 2014-07-15T23:14:00.523 回答
0

最后,我总结了这一点,以便将来可能会参考此线程的人快速参考:

对于 .NET,最简单的基准测试方法是使用 XSLT 分析器。但问题是它仅适用于安装了分析工具的 Microsoft Visual Studio Team System。

另一个不错的选择是来自 Saxonica 的开源工具 XT-Speedo。试试看。

除此之外,您还可以对 XSL 运行多次转换并使用简单的 StopWatch Tick 来获得一个平均值,这在大多数情况下可能就足够了。

于 2014-07-21T19:46:00.747 回答