C# LINQ 需要注意的地方


.NET 语言可以通过写 LINQ 语句来使程序变得简洁. 感觉 LINQ 就点像 SQL 语句. 大部分情况下, 写 LINQ 和用 ForEach 写出来的在执行效率上没有区别, 但是我们需要注意的是, 比如下面这种情况:

1
2
3
4
5
var test = Enumerable.Range(1, 100);
var a = test.Where(n => n%2 == 0);
var b = a.Sum();
var c = a.Count();
var d = from x in a where x%2 == 0 select x;
var test = Enumerable.Range(1, 100);
var a = test.Where(n => n%2 == 0);
var b = a.Sum();
var c = a.Count();
var d = from x in a where x%2 == 0 select x;

变量 test 是1到100之间的数字集, a 是 返回这之间的偶数的 LINQ 查询, 注意的是这条语句只是把这个查询存储起来, 并不马上去做查询, 后面的变量在赋值时会依次的执行这语句, 这样的话, 就执行了三遍, 所以当数据量大的时候, LINQ执行三次效率就非常的低. 解决方法就是在 把LINQ结果立马转存成 Array 或者 List 这样相当于把结果缓存起来了.

1
2
3
4
5
6
// helloacm.com
var test = Enumerable.Range(1, 100);
var a = test.Where(n => n%2 == 0).ToList(); // or ToArray()
var b = a.Sum();
var c = a.Count();
var d = from x in a where x%2 == 0 select x;
// helloacm.com
var test = Enumerable.Range(1, 100);
var a = test.Where(n => n%2 == 0).ToList(); // or ToArray()
var b = a.Sum();
var c = a.Count();
var d = from x in a where x%2 == 0 select x;

好消息是, Resharper 会提示这种潜在性能上的问题: Possible Multiple Enumeration of IEnumerable.

linq-possible-multiple-enumeration-of-ienumerable C# LINQ 需要注意的地方 技术 折腾 程序设计

linq-possible-multiple-enumeration-of-ienumerable

英文同步: https://helloacm.com/c-linq-possible-multiple-enumeration-of-ienumerable-resharper/

GD Star Rating
a WordPress rating system
本文一共 214 个汉字, 你数一下对不对.
C# LINQ 需要注意的地方. (AMP 移动加速版本)
上一篇: Sheffield 到 Luton Airport Parkway 的火车
下一篇: USB充电速度影响因素

扫描二维码,分享本文到微信朋友圈
5f036af51b25ba02cfbdad115c6e88d6 C# LINQ 需要注意的地方 技术 折腾 程序设计

一条回应

评论