通过分组linq结果进行预告是非常缓慢的,任何提示?

时间:2010-09-17 20:16:22

标签: c# linq performance foreach

我对正在运行的程序进行了一些分析,花费时间最长的事情是从linq查询中获取结果:

var Results = 
    from a in Table
    group a by a.Value into b
    select new {Group = b};

foreach(var Result in Results)
{
    //Do calcs
}

关于如何加快速度的任何想法?

3 个答案:

答案 0 :(得分:2)

我认为您将查询对象与该查询的结果混淆。您的第一个变量不包含结果,它包含一个查询对象。此时查询尚未执行。执行会延迟,直到您确实需要结果,并且在您的示例中,这是在您在foreach循环中进行迭代时完成的。这就是第一个语句快速执行但迭代很慢的原因。

如果要在results中存储查询结果,以便在启动foreach循环时计算它们,则添加对ToList()的调用。

var results = 
    (from a in Table
     group a by a.Value into b
     select new {Group = b}).ToList();

答案 1 :(得分:0)

如果您使用的是.NET 4,请查看P-LINQParallel ForEach循环。这应该会大大提高绩效。

根据给出的信息无法确定,但它可能是一个SQL查询花了太长时间?

如果ForEach循环确实导致了瓶颈,那么Parallel ForEach将是你最好的选择。

答案 2 :(得分:0)

我遇到了同样的问题,只有2000个用于MSChart的Sqlite记录(索引),显然这是由查询所有记录的LINQ组语句引起的。

我找到的唯一解决方案是回到原生SQL并使用LINQ和SQlite瞬间渲染图表而不是2秒。