LINQ 性能比较:Count vs Where 和 Count

17 浏览
0 Comments

LINQ 性能比较:Count vs Where 和 Count

public class Group

{

public string Name { get; set; }

}

测试:

List _groups = new List();

for (int i = 0; i < 10000; i++)

{

var group = new Group();

group.Name = i + "asdasdasd";

_groups.Add(group);

}

Stopwatch _stopwatch2 = new Stopwatch();

_stopwatch2.Start();

foreach (var group in _groups)

{

var count = _groups.Count(x => x.Name == group.Name);

}

_stopwatch2.Stop();

Console.WriteLine(_stopwatch2.ElapsedMilliseconds);

Stopwatch _stopwatch = new Stopwatch();

_stopwatch.Start();

foreach (var group in _groups)

{

var count = _groups.Where(x => x.Name == group.Name).Count();

}

_stopwatch.Stop();

Console.WriteLine(_stopwatch.ElapsedMilliseconds)

结果:第一种方法:2863毫秒,第二种方法:2185毫秒

有人能解释一下为什么第一种方法比第二种方法慢吗?第二种方法应该返回枚举器并调用计数,而第一种只是调用计数。第一种方法应该稍微快一点。

编辑:我删除了计数器列表以防止使用GC,并改变了顺序以检查排序是否有意义。结果几乎相同。

编辑2:这个性能问题不仅与Count有关。它与First(),FirstOrDefault(),Any()等有关。 Where +方法总是比Method方法快。

0