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

  1. .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
  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),这确实是一个非常大的性能提升,我们的基础库真的是越来越强大 🐂👃。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转]软件测试演义——中高级系列(序)

[转]软件测试演义——中高级系列&#xff08;序&#xff09; 2015-06-11 转自&#xff1a;软件测试演义——中高级系列&#xff08;序&#xff09; 目前&#xff0c;软件测试团队主要集中在大型外资企业&#xff0c;国内软件测试水平还处在发展阶段&#xff0c;人们对测试理解…

男人是大猪蹄子的证据找到了!

1 老师&#xff01;2 您倒也不必如此诚实3 哈哈哈哈哈哈这也太显眼了4 圆的面积其实可以这样算5 喵&#xff1a;进不去......好烦&#xff01;&#xff01;6 狗子&#xff1a;好好扔&#xff0c;砸我干嘛&#xff1f;你到底会不会玩&#xff1f;&#xff01;7 男人是大猪蹄子的…

可视化的数据结构和算法

分享自: http://coolshell.cn/articles/4671.html/comment-page-1#comment-52802 还记得之前发布过的那个关于可视化排序的文章吗&#xff1f;在网上又看到了一个旧金山大学David Galles做的各种可视化的数据结构和基本算法的主页&#xff0c;网址在这里&#xff0c;大家可以看…

set-cookie 和 cookie 的区别_Go Web 编程如何确保Cookie数据的安全传输

什么是CookieCookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据&#xff0c;它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常&#xff0c;它用于告知服务端两个请求是否来自同一浏览器&#xff0c;如保持用户的登…

去除箭头

cell.selectionStyle UITableViewCellSelectionStyleNone;//去除箭头转载于:https://www.cnblogs.com/chivas/archive/2012/04/22/2464915.html

使用C#快速生成顺序GUID

前言通常&#xff0c;我们采用数值ID(long)/GUID作为全局唯一标识符。但是&#xff0c;在多线程、高并发情况下&#xff0c;由应用程序生成数值ID容易产生重复&#xff0c;而由数据库生成又会造成性能瓶颈。而使用Guid.NewGuid()生成的GUID虽然不会重复&#xff0c;但是它是无序…

java符号%3e%3e是什么意思,终于找到了!有了它你就可以读懂字节码了!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼0x80 ior 将栈顶两int型数值作“按位或”并将结果压入栈顶0x81 lor 将栈顶两long型数值作“按位或”并将结果压入栈顶0x82 ixor 将栈顶两int型数值作“按位异或”并将结果压入栈顶0x83 lxor 将栈顶两long型数值作“按位异或”并将结…

带你见识世界的5部纪录片(免费领取)

全世界只有3.14 % 的人关注了爆炸吧知识纪录片一直都是增长见识又带给你力量的东西&#xff0c;你可能忙于学业、生活、工作而不能行万里路&#xff0c;但至少你还可以看纪录片&#xff0c;从一方屏幕看到整个世界。今天就为大家整理了5部高分纪录片&#xff0c;文末附领取方式…

Android简明开发教程二十一:访问Internet 绘制在线地图

在例子Android简明开发教程十七&#xff1a;Dialog 显示图像 中我们留了一个例子DrawMap()没有实现&#xff0c;这个例子显示在线地图&#xff0c;目前大部分地图服务器都是将地图以图片存储以提高响应速度。 一般大小为256X256个像素。具体可以参见离线地图下载方法解析 。 比…

Stefan Tilkov:跳过单体应用,从微服务开始

在过去的几个月中&#xff0c;许多人都宣称微服务架构应该总是从单体应用开始&#xff0c;其中包括Martin Fowler和Sam Newman&#xff0c;但Stefan Tilkov认为&#xff0c;那经常是错误的&#xff0c;构建一个模块边界清楚、结构良好的单体应用然后再迁移到微服务在大多数情况…

url采集工具_大数据关键技术浅谈之大数据采集

在前几篇文章中&#xff0c;企通查为大家介绍了大数据处理的基本流程。从大数据的一系列处理过程中&#xff08;抽取、集成、分析、解释&#xff09;&#xff0c;我们可以发现这一整套流程中涵盖了数据存储、处理、应用等多方面的技术。大数据价值的完美体现需要多种技术的协同…

使用 WPF + Chrome 内核实现 在线客服系统 的复合客服端程序

本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程。本产品已经成熟稳定并投入商用。免费使用 & 私有化部署免费下载&#xff1a;https://docs.shengxunwei.com/Post/f7bc8496-14ee-4a53-07b4-08d8e3da6269视频实拍&#xff1a;演示升讯威在线…

abp框架java,【Net】ABP框架学习之正面硬钢

前言本文介绍另一种学习ABP框架的方法&#xff0c;该方法为正面硬钢学习法。。。我们不去官网下载模板&#xff0c;直接引用DLL&#xff0c;直接使用。WebApi项目创建首先创建一个WebApi项目&#xff0c;结构如下。然后Nuget搜索ABP&#xff0c;安装ABP框架。(我这里安装的是5.…

浮躁的社会

今天去了趟百脑汇&#xff0c;原本是想看看手机&#xff0c;结果发现现在的私人手机卖场真的很山寨&#xff0c;百脑汇二楼整个都是手机的天下&#xff0c;但清一色的都是手机模型&#xff0c;偶尔有手机的也几乎是清一色的翻新机&#xff0c;其实手机的源头就是那么几个上家。…

不同对象的通话是时长​

1 一个专门为某人打造的形容词2 当代人的手机铃声3 “可以吃宵夜吗”“不行” 4 好可爱&#xff01;&#xff01;&#xff01;5 这不是道具&#xff0c;是真的红酒杯里倒着红酒叠在硬币上&#xff01;6 这14个未接电话就很有灵性了&#xff01;7 你觉得以下哪个事件给你的痛苦感…

oslo.config资源

官方文档:http://docs.openstack.org/developer/oslo.config/cfg.html转载于:https://blog.51cto.com/6374820/1661405

poj 1088 滑雪 详解

http://poj.org/problem?id1088 这是一道dp入门题&#xff0c;不过我一直没想明白应该怎么dp。今天&#xff0c;在做自己学校oj的算法基础题时看到这题&#xff0c;标注着dp的分类&#xff0c;加上我一直都比较喜欢做dp题&#xff0c;于是我就决心今晚要把这道入门题切了。 题…

python find函数_Python 速学!不懂怎么入门python的小白看这篇就够了!

Python是一种非常流行的脚本语言&#xff0c;而且功能非常强大&#xff0c;几乎可以做任何事情&#xff0c;比如爬虫、网络工具、科学计算、树莓派、Web开发、游戏等各方面都可以派上用场。同时无论在哪种平台上&#xff0c;都可以用 Python 进行系统编程。本文讨论基本的 Pyth…

前端开发的盛宴

想写这篇文章由来已久&#xff0c;目的是想回顾一下基于Web技术的开发技术和流程的变迁&#xff0c;以及其背后的原因或规律。我依然记得&#xff0c;很多年前做出来第一个公司网站时的激动心情&#xff08;加班到晚上&#xff0c;兴奋地在空旷的办公室走来走去&#xff09;&am…

datav本地部署 java,Spring Boot对Spring Data JPA的自动配置

一 点睛Spring Boot对Spring Data JPA的自动配置放置在如下路径&#xff1a;二 源码分析1 JpaRepositoriesAutoConfiguration类分析ConfigurationConditionalOnBean(DataSource.class)ConditionalOnClass(JpaRepository.class)ConditionalOnMissingBean({ JpaRepositoryFactory…