对List的 【Select】【Where】【FindAll】的运行效率的测试

pthiiu 2010-10-15 02:24:45
被测试的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要慢一些。

只是为了给大家用来做一个参照,希望对大家在工作和学习中有些帮助
...全文
1637 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shen3649 2011-11-30
  • 打赏
  • 举报
回复
where是有些慢,总体还不错
q107770540 2010-10-15
  • 打赏
  • 举报
回复
看 看
宝_爸 2010-10-15
  • 打赏
  • 举报
回复
感谢lz分享
pthiiu 2010-10-15
  • 打赏
  • 举报
回复
不知道C#4的PLINQ的结果会怎么样。。有人能贴出来一些相关数据吗?

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧