.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.
英文同步: https://helloacm.com/c-linq-possible-multiple-enumeration-of-ienumerable-resharper/
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK