相关疑难解决方法(0)

foreach + break vs linq FirstOrDefault性能差异

我有两个类来执行特定日期的日期范围数据获取.

public class IterationLookup<TItem>
{
    private IList<Item> items = null;

    public IterationLookup(IEnumerable<TItem> items, Func<TItem, TKey> keySelector)
    {
        this.items = items.OrderByDescending(keySelector).ToList();
    }

    public TItem GetItem(DateTime day)
    {
        foreach(TItem i in this.items)
        {
           if (i.IsWithinRange(day))
           {
               return i;
           }
        }
        return null;
    }
}


public class LinqLookup<TItem>
{
    private IList<Item> items = null;

    public IterationLookup(IEnumerable<TItem> items, Func<TItem, TKey> keySelector)
    {
        this.items = items.OrderByDescending(keySelector).ToList();
    }

    public TItem GetItem(DateTime day)
    {
        return this.items.FirstOrDefault(i => i.IsWithinRange(day));
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我做了速度测试,表明Linq版本慢了大约5倍.当我在本地存储项目而不使用它们进行枚举时,这是有意义的ToList.这会使它慢得多,因为每次调用时 …

c# linq performance foreach .net-4.0

49
推荐指数
3
解决办法
9469
查看次数

标签 统计

.net-4.0 ×1

c# ×1

foreach ×1

linq ×1

performance ×1