IEnumerable列表性能问题

时间:2014-03-09 11:42:59

标签: c# performance linq ienumerable tolist

我在SO上经历了几个帖子,但找不到解决方案(针对此具体)。 我有一些复杂的Linq查询,它返回少量数千行。我正在使用IEnumerable作为结果。但后来,我需要遍历每一行,执行一些操作。为此,我通过调用ToList()来转换它。但是这(我相信)正在扼杀性能,并且超时。有关优化的建议/指导吗?如果我遗失了什么,你可以纠正我。 (我是性能问题的新手)

这是我的代码:

IEnumerable<someModel> results = null;

results = from x in tableX ..... select xyz;
//some complex query, returning few thousands of rows.

//now converting to list:
List<someModel> MYresults = results.ToList();
number_of_records = MYresults.Distinct(new myComparer()).Count();

//row operation that I need to perform:
if(condition)
{
    foreach(someModel m in MYresults)
    {
        m.property = m.property + someOperations();
    }
}

if(somecondition)
{
    return MYresults.Distinct(new someComparer()).ToList();
}
else
    return MYresults.Distinct(new someComparer()).Skip(x).Take(y).ToList();

1 个答案:

答案 0 :(得分:2)

results变量不包含数千行......只是一个查询。

results = from x in tableX ..... select xyz;  // just a query, no data yet

在致电ToList()之前,您实际上并没有检索任何记录。缓慢可能是查询的复杂性,或记录的数量......或两者兼而有之。

List<someModel> MYresults = results.ToList();  // get data

由于您正在对数据执行Distinct()以删除某些记录,因此我要考虑将以下行合并到您原来的LINQ语句中,因此您不要甚至首先将这些记录拉过来。 (如果someComparer中的代码无法转换为有效的SQL,则可能无法正常工作。)

results = from x in tableX ..... select xyz;

return results.Distinct(new someComparer()).ToList();