IEnumerable.OrderBy().First() 在 .netcore 3.1 中是否做了优化?
咨询区
Matthew Watson:
我记得 .net core 中有一个版本对下面的场景做了一个优化,代码如下:
int smallest = new[]{ 7, 2, 4, 6, 0, 1, 6, 9, 8 }.OrderBy(i => i).First();
在很早之前它的时间复杂度是 O(N.Log(N))
,现在已经优化成 O(N)
了。
为了验证,我用 .NET Core 和 .NET Framework 来跑下面的这段代码,参考如下:
using System;
using System.Collections.Generic;
using System.Linq;namespace Demo
{static class Program{static void Main(){int[] test = { 7, 2, 4, 6, 0, 1, 6, 9, 8 };var comparer = new Comparer();var _ = test.OrderBy(i => i, comparer).First();}}class Comparer : IComparer<int>{public int Compare(int x, int y){Console.WriteLine($"Comparing {x} with {y}");return x.CompareTo(y);}}
}
如果你想试试的话,可以参考如下两个在线工具。
.NET Framework: https://dotnetfiddle.net/XItXYL
.NET Core: https://dotnetfiddle.net/swlc0O
.NET Framework 4.8
Comparing 0 with 7
Comparing 0 with 8
Comparing 0 with 9
Comparing 0 with 6
Comparing 0 with 1
Comparing 0 with 0
Comparing 0 with 2
Comparing 0 with 6
Comparing 0 with 4
Comparing 0 with 2
Comparing 0 with 0
Comparing 7 with 2
Comparing 7 with 4
Comparing 7 with 6
Comparing 7 with 7
Comparing 7 with 8
Comparing 7 with 9
Comparing 7 with 6
Comparing 7 with 1
Comparing 7 with 7
Comparing 7 with 1
Comparing 9 with 7
Comparing 9 with 9
Comparing 9 with 8
Comparing 7 with 7
Comparing 7 with 8
Comparing 7 with 7
Comparing 6 with 2
Comparing 6 with 4
Comparing 6 with 6
Comparing 6 with 1
Comparing 6 with 6
Comparing 6 with 6
Comparing 6 with 1
Comparing 6 with 6
Comparing 6 with 6
Comparing 4 with 2
Comparing 4 with 4
Comparing 4 with 1
Comparing 2 with 2
Comparing 2 with 1
.NET Core 3.1
Comparing 2 with 7
Comparing 4 with 2
Comparing 6 with 2
Comparing 0 with 2
Comparing 1 with 0
Comparing 6 with 0
Comparing 9 with 0
Comparing 8 with 0
最后提一下,大家记得在哪里看到这样的文档记载吗?不是官方的就不要发了。
回答区
Matthew Watson:
确实,对这个进行优化的文档说明是有的,可以参考下 Github: https://github.com/dotnet/runtime/issues/14867
上的这个讨论和最后的编码实现。
点评区
由 O(N.Log(N))
变成 O(LogN)
,这确实是一个非常大的性能提升,我们的基础库真的是越来越强大
IEnumerable.OrderBy().First() 在 .netcore 3.1 中是否做了优化?相关推荐
- 面试题:在日常工作中怎么做MySQL优化的?
前言 MySQL常见的优化手段分为下面几个方面: SQL优化.设计优化,硬件优化等,其中每个大的方向中又包含多个小的优化点 下面我们具体来看看 SQL优化 此优化方案指的是通过优化 SQL 语句以及索 ...
- AI中pass架构设计优化
AI中pass架构设计优化 Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,例如平均推理,内存占用,或特定设备的功耗.有一套标准优化,及特定机器学习的优化,包括常量折叠 ...
- DRO:SFM任务中的深度循环优化器(阿里巴巴AI Lab)
代码.论文地址:在公众号「3D视觉工坊」,后台回复「DRO」,即可直接下载. Motivation: 解决一个优化问题,常见的优化器比如梯度下降法, 牛顿法等, 一般会先计算梯度------>再 ...
- SAP WM LT15不能取消二步法确认场景中只做过第一步确认的TO单
SAP WM LT15不能取消二步法确认场景中只做过第一步确认的TO单 1,如下TO 需要2步法确认,TO#3000006418 看其确认状态时黄色三角形状态,说明第一步确认(LT1D)已经被业务人员 ...
- 计算机算法对程序设计的作用,计算机编程中数学算法的优化策略
李钰 摘要:在计算机编程中,合理地运用数学算法所拥有的优势不但可以完好地针对所拥有的问题进行总结分类归纳,还可以将其归纳作为基础从而进行针对性的统一计算,并且能够将非常复杂的问题进行整体的简化并且将其 ...
- go 基准测试 找不到函数_Go 中的内联优化 | Linux 中国
本文讨论 Go 编译器是如何实现内联的,以及这种优化方法如何影响你的 Go 代码.https://linux.cn/article-12176-1.html作者:Dave Cheney译者:Xiaob ...
- json中怎么去掉[]外的引号_SEO优化中怎么做站内和站外的锚文本
在影响排名的所有SEO因素中,我们把最重要的因素献给了锚文本链接! 做站内和站外锚文本的技巧,包括基础的操作. 1.所有锚文本,都尽量采用绝对地址. 这样,当你的文章被转载.被采集.或Rss阅读器抓取 ...
- 企业网络推广专员浅析企业网络推广中网站关键词排名优化有何技巧?
自从企业网站上线运营之后,站长通过对企业网站自身定位规划的优化策略逐步展开优化进程,利用熟知的网站优化方法帮助企业网站快速获得搜索引擎收录,有了收录更能为用户呈现出企业网站优质的一面,获得良好排名助力 ...
- 在网络推广外包中企业网站排名优化在网络推广外包中如何实现?
随着互联网市场中企业网站数量的增加,网站优化人才的需要与日俱增,据资料显示,与国内当下亿万网民相比,我国目前仅有不足100万家企业从事网络营销,对于网络营销人才的需求也是巨大,未来几年将产生数以百万计 ...
最新文章
- Swift教程Swift语言快速入门(内部资料)
- shell脚本之nginx的安装
- 《数据结构》知识点Day_04
- android+busybox+编译,Android版busybox编译
- IntelliJ Idea取消Could not autowire. No beans of 'xxxx' type found的错误提示
- 100行JS代码实现❤坦克大战js小游戏源码 HTML5坦克大战游戏代码(HTML+CSS+JavaScript )...
- 第一讲 数学方法论引论
- biopython有什么用_Biopython简介
- was升级jdk版本_was升级jdk1.7
- jQuery 效果 ——fadeIn() 方法、fadeOut() 方法
- 用excel做logistic回归分析_用Excel做回归分析的详细步骤
- Cursor的使用和下载
- JavaScript实现淘宝商品展示(鼠标放在小图片上,上面会出现相应的大图片)
- css+js+jq实训笔记
- 计算机毕设项目:毕业论文管理系统(一)
- Andriod编程基础(一):Andriod的优势及光明前景
- 2021潍坊私立高中高考成绩查询,2021潍坊民办私立高中学校入学分数
- 春学期C语言程序设计,2019年春季学期《C语言程序设计II》课程总结
- 876. 链表的中间结点--javaScript实现
- 36: ansible基础 、 Ansible ad-hoc 、 总结和答疑