
一直都很纠结,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