.net 具有性能问题的LINQ到xml查询

.net 具有性能问题的LINQ到xml查询,.net,xml,performance,linq,.net,Xml,Performance,Linq,我编写了以下LINQ到xml查询: Dim xd1 As XDocument = XDocument.Load("C:\doc1.xml") Dim xd2 As XDocument = XDocument.Load("C:\doc2.xml") Dim xd3 As XDocument = XDocument.Load("C:\doc3.xml") Dim q = From a In xd1...<row>, b In xd2...<row>, c In xd3...

我编写了以下LINQ到xml查询:

Dim xd1 As XDocument = XDocument.Load("C:\doc1.xml")
Dim xd2 As XDocument = XDocument.Load("C:\doc2.xml")
Dim xd3 As XDocument = XDocument.Load("C:\doc3.xml")

Dim q = From a In xd1...<row>, b In xd2...<row>, c In xd3...<row> Where
        a.@Field1 = "pippo" AndAlso b.@Field2 = a.@RifField2 AndAlso c.@Field3 = a.@RifField3 Select
        b.@Field4, b.@Field5, c.@Field6

Dim s As String = ""
For Each a In q
    s &= a.Campo4 & " - " & a.Campo5 & " - " & a.Campo6 & vbCrLf
Next

TextBlock1.Text = s
最奇怪的是,需要很长时间才能看到项目列表完成,并且必须退出循环。详细信息:查询q只有8项

你有什么建议来解决我的绩效问题吗? Pileggi

让我们看看这里:

您有3个XML文件,假设它们分别有K、L、M
row
元素

然后对所有这些元素进行分析,这意味着有K*L*M个可能的结果需要评估。根据K、L和M的大小,这将是非常快速的大量工作-如果每个都只有1000行,那么可能会有10亿个结果。这就是为什么这是如此缓慢

您应该首先进行过滤,以避免创建如此巨大的笛卡尔积-在创建笛卡尔积之前,移动条件
a.@Field1=“pippo”
,这将显著提高性能

例如,如果在第一个XML文件中只有10行与“pippo”匹配,那么现在只有10*1000*1000可能的结果=1000万-仍然很多,但只有当前查询中行数的1/100

在C#(我不是一个VB的家伙)中,这将是类似的

var query = from a in xd1.Descendants("row").Where(x=> x.Field1 == "pippo")
            from b in xd2.Descendants("row")
            from c in xd3.Descendants("row")
            //rest of query

非常感谢,我将在星期三(5月1日,意大利,我们庆祝工人)尝试你的建议,但对你来说,执行显然是立即的,在调试中,当必须退出周期时,唯一的延迟出现,这难道不奇怪吗?
var query = from a in xd1.Descendants("row").Where(x=> x.Field1 == "pippo")
            from b in xd2.Descendants("row")
            from c in xd3.Descendants("row")
            //rest of query