我想知道在使用简单查询时是否存在任何性能差异:
var x = document.XPathSelectElement("actors/actor")
vs
var x = document.Descendants("actors").Descendants("actor")
答案 0 :(得分:8)
注意这个
var x = document.Elements("actors").Elements("actor").FirstOrDefault();
相当于你的第一个陈述。
会有性能差异,因为这些方法在幕后做了很多不同的事情。但是,除非处理大型数据集,否则优化纯内存操作有点无意义。如果您正在处理大型数据集,那么您应该测量两种备选方案的性能,而不是试图预测哪一种方案运行得更快。
答案 1 :(得分:4)
似乎有一个打击,其他人做了基准测试腿部工作: http://blog.dreamlabsolutions.com/post/2008/12/04/LINQ-to-XML-and-LINQ-to-XML-with-XPath-performance-review.aspx
答案 2 :(得分:1)
是的,虽然这两行不相同。
需要将XPath最终解析为LINQ表达式,然后执行此操作: -
var x = document.Elements("actors").Elements("actor");
然而,很有可能在内部存储XPath表达式的编译版本,以便使用XPath只花费在一些内部保存的字典中查找字符串所花费的时间。不管是不是这样,我都不知道。
答案 3 :(得分:1)
从我的有限测试中,性能似乎非常相似。我从http://msdn.microsoft.com/en-us/library/windows/desktop/ms762271(v=vs.85).aspx
获取了一个示例XML消息XPath:
/book[id='bk109']
LINQ查询:
from bookElement in xmlElement.Descendants( "book" )
where bookElement.Attribute( "id" ).Value == "bk109"
select bookElement
然后我执行了10,000次(不包括解析字符串所花费的时间和第一次运行以消除CLR噪声)。
结果(100,000次迭代)
因此,似乎至少在某些情况下,对XElement的XPath评估比LINQ to XML更好。 XPathDocument上的XPath评估甚至更快。
但是,加载XPathDocument似乎需要比加载XDocument(1000次迭代)更长的时间: