C#记一次for ,linq,foreach性能比较

《C#记一次for ,linq,foreach性能比较》

一直都很纠结,C#中到底for,linq,foreach哪一个性能更强,效率更高,百度了很多篇文章,大多都含糊其词,有的说for,有的说linq,也有的说foreach, 为什么会有这么多差异呢? 他们真的自己做了测试了吗?还是因为他们的.net版本不同? 唉,不管,有点像小马过河,问了老黄牛又问了小松鼠,河到底是深还是浅,终究还是得自己下水测一下

//补充说明: cells 集合里面大概有 200条记录 在这200条记录里快速查询某一个记录
//linq查询语句 
var rows = (from row in cells where row.v2.x == v2.x && row.v2.y==v2.y select row).FirstOrDefault();
//for查询语句
for (int i = 0; i < cells.Count; i++) {
	if (cells[i].v2.x == v2.x && cells[i].v2.y == v2.y) {
		return cells[i];
	}
}
//foreach查询语句
foreach (var row in cells) {
	if (row.v2.x == v2.x && row.v2.y == v2.y) {
		return row;
	}
}
调用方式:
//开始计时
var s = watchStart();

//执行 100000次
for (int i = 0; i < 100000; i++) {
     //主调用  
     var k = getCell(V2(1, 1));
}

//结束计时
watchEnd(s);

比较查询速度,结果:

   

// 1万 次
//for   0.0008097 秒 0.0008334 秒
//linq  0.0096684 秒 0.0108114 秒 
//foreach  0.0044461 秒 0.0043771 秒 


// 10万 次
//for  0.0056032 秒 0.006727 秒  
//linq 0.0962000 秒 0.096630 秒
//foreach 0.0355213 秒  0.0356096 秒


//100万 次
//for    0.0612788 秒  0.0558504 秒
//linq   0.9943547 秒  1.0133618 秒
//foreach 0.3948691 秒  0.3629203 秒
结果可以看出,查询一个大约200条记录的集合时, 执行效率是 for > foreach > linq
点赞

发表评论

邮箱地址不会被公开。 必填项已用*标注