Ton*_*ony 5 c# xml xslt performance xpath
我正在创建一个 xsl stylehseet 并提出了这个(在我看来是不合逻辑的行为):
这个 XPath:
/root/element[1][@attr1 != '1' 或 @attr2 != 'test']
比这个 XPath 慢得多:
/root/element[count(preceding-sibling::element) + 1 = 1) and (@attr1 != '1' or @attr2 != 'test')]
我有 50 个示例 xml,第一个 XPath 需要大约 55 秒。
使用第二个 XPath 需要大约 4 秒!
我使用 XslCompiledTransform (C# .NET 4.5)。
有人可以解释为什么第一个 XPath 比第二个慢得多吗?我一直认为最好使用显式索引过滤器。
更新:一些示例 xml:
<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<element attr2="test" attr1="1">
<child>17</child>
<child>17</child>
<child>16</child>
...
<child>3</child>
<child>2</child>
<child>1</child>
</element>
<element attr2="test2" attr1="2">
<child/>
<child/>
<child/>
<child/>
<child/>
<child/>
<child/>
...
<child/>
</element>
....
<element attr2="test21" attr1="21" />
Run Code Online (Sandbox Code Playgroud)
只有 20-25 个元素有 n 个孩子,但深度最大值为 4(/root/element/child/anotherChild)。
我得出的解决方案是我必须接受这一点。微软说https://support.microsoft.com/en-us/kb/815124:
使用显式索引过滤器,MSXML 的所有版本(3.0 版及更高版本)的速度都会更快。性能的提高取决于元素在父级子列表中的位置。而不是使用以下内容:
/子元素
使用以下内容:
/子元素[1]
就我而言,第一个示例比微软的推荐要快得多。
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |