LINQ 性能比较:Count vs Where 和 Count
LINQ 性能比较:Count vs Where 和 Count
public class Group
{
public string Name { get; set; }
}
测试:
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方法快。