我对正在运行的程序进行了一些分析,花费时间最长的事情是从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
}
关于如何加快速度的任何想法?
答案 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-LINQ或Parallel ForEach循环。这应该会大大提高绩效。
根据给出的信息无法确定,但它可能是一个SQL查询花了太长时间?
如果ForEach循环确实导致了瓶颈,那么Parallel ForEach将是你最好的选择。
答案 2 :(得分:0)
我遇到了同样的问题,只有2000个用于MSChart的Sqlite记录(索引),显然这是由查询所有记录的LINQ组语句引起的。
我找到的唯一解决方案是回到原生SQL并使用LINQ和SQlite瞬间渲染图表而不是2秒。