为什么Linq方式更快

时间:2014-07-18 20:46:30

标签: c# linq entity-framework

我试图解决这个问题,为什么linq比手动编程快得多。

情景1:

Series = _model.Titles
    .Where(t => TempIds.Contains(t.ID))
    .ToList()
    .Select(t => new BaseSeries(t))
    .ToList();

情景2

foreach (var title in _model.Titles)
{
   if (TempIds.Contains(title.ID))
   {
        Series.Add(new BaseSeries(title));
        TempIds.Remove(title.ID);
        if (TempIds.Count == 0)
            break;
   }
}

当我计算时,Linq完成查询并在.265s中创建列表

虽然foreach需要2.62s?

Linq也在进行额外的演员表。需要First .ToList()来防止Linq实体错误。这个表挺大的。缓存尚未实现,因此它不是缓存。

Linq如何进行优化,使其完成速度提高10倍?

1 个答案:

答案 0 :(得分:9)

_model.Titles.Where(t => TempIds.Contains(t.ID))

此行仅从数据库中提取符合条件的记录。

foreach (var title in _model.Titles)

虽然这会将整个表拉入数据库,并在将记录转换为对象后执行过滤。因此存在差异。


这两者的基础查询可能如下所示:

-- _model.Titles.Where(t => TempIds.Contains(t.ID))
select * from Title where TempIds like '%' + ID + '%'

-- foreach (var title in _model.Titles)
select * from Title