被测试的List 有 10000000 个元素,
List<int> list = new List<int>(10000000)
每个Action都运行 100 次,用.NET提供的Stopwatch计时,测试结果的单位是 ticks 和 微秒 ms
Stopwatch sw = new Stopwatch();
...
sw.Start();
Action...
sw.Stop();
long ms = sw.ElapsedMilliseconds;
long ticks = sw.ElapsedTicks;
...
Ticks/Action: Action 的平均ticks
Total ms: 100次 Action 的总耗时
Action..........Ticks/Action Total ms
Select................281...........1
Where.................132..........<1*
Where + toList....5283059.......36843
Where + toArray...5196647.......36249
FindAll...........4637059.......32338
GetAll(foreach)...4513005.......31467
GetAll(for).......4286310.......29886
Min...............6740435.......47027
GetMin(foreach)...2310379.......16091
GetMin(for).......2239742.......15592
Max...............6764895.......47201
GetMax(foreach)...2318926.......16143
GetMax(for).......2326529.......16201
GetXXX(for) 就是指自己用
for(int i = 0;i<list.Count;i++)
循环查找相应的结果。
GetXXX(foreach)就是用
foreach(int value in list)
循环查找到的结果。
在同样的条件下foreach要比for稍微快一些
*本来结果是0, 应该是因为小于1ms,看ticks就可以了 (ticks应该是CPU的时钟周期的意思吧)
Linq提供了挺多比较好的功能,但是有些操作的运行效率还不是非常让人满意,其中select和where的运行速度还不错,是因为只是记录一下位置,但没生成新的list,所以对select和where的结果的操作受到了很多限制,如果对其结果再加上toList 或者是 toArray了,总效率就和 FindAll 相当了,不过还是要比自己用for或者是foreach循环写的GetXXX要慢一些。
只是为了给大家用来做一个参照,希望对大家在工作和学习中有些帮助