Java stream慢_Java 8 的 stream API 和 C# 的 LINQ 哪个更慢?

Java 不了解,我只谈一下Linq。

题主说的应该只是 Linq To Objects,也就是 Enumerable 实现的一堆扩展方法。Reverse 为什么那么实现是因为 IEnumerable 的限制,它并没有 IReadOnlyCollection 的 Count,也没有 IReadOnlyList 的随机访问,再加上 c# 并没有模板特化之类的特性,所以在语言和库能做的优化实在有限。另外 RyuJIT 的优化也不能让人满意,devirtualize 不知道什么时候实装。

如果就整个 Linq 来看,优势应该是扩展性,比如 Linq To Entities、Linq To SQL、Linq To WMI等等,库作者只需要实现 QueryProvider 就能把 LinqExpression 翻译成另一种语言或者操作。而对用户来说学习成本很低,不管是查询什么都是同一套语法和类似的函数。

正因为很好的扩展性,Linq To Objects 的性能问题也就有了解决办法:LinqOptimizer 就是这样一个库,把 Linq 查询进行了编译(不过它不是通过实现 QueryProvider 的方式),生成了基于 for 循环的代码,性能是原来的15倍。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值