【春华秋实】.NET Core之只是多看了你一眼
感官初体验
技术学习是一件系统性的事情,如果拒绝学习,那么自己就会落后以至于被替代。.NET也是一样,当开源、跨平台成为主流的时候,如果再故步自封,等待.NET的就是死路一条,幸好.NET Core问世了,社区反响积极而又强烈,.NET Core的生态体系不断得到丰富。作为.NET技术人员,你必须去深入了解.NET Core,作为非.NET技术人员,.NET Core也值得你去关注。
.NET Core作为.NET计划的跨平台开源版本,也是下一代.NET的主力版本,现在的微软越来越开放,作为其平台技术从业者,没有理由不持续跟进。也希望通过大家的努力,打造一个庞大而又健全的.NET生态体系。
补充一下,在2019年6月27日之后,.NET Core补丁更新将不再包含.NET Core 1.0和1.1的更新包或容器映像。我们应该尽快从.NET Core 1.x升级到.NET Core 2.1或2.2及以后的版本。在.NET Core3.0版本中,.NET Core 将支持Winform和WPF。
本系列文章以.NET Core2.2及以后的版本为基础。
看了看
.NET Core最大和最具竞争力的特点就是跨平台,相较于.NET如果仅绑定于Windows并面向单一用户,那么其将难以在多用户服务器环境中创建高性能的应用,Core使得Microsoft得以将开发基础重置为以服务器为中心的模式。
下图是.NET Core未来的发展方向:
通过上图我们可以知道,.NET框架的内容丰富了,包括.NET Framework、.NET Core和XAMARIN微软使用.NET Standard Library来统一整个.NET框架,但是维护起来确是一个非常有成本的事情,所以有时候我会想,未来是不是只会保留.NET Core的内容,而移除.NET Framework。毕竟现在的处理只是过渡期的过渡方式,但是考虑到.NET Framework庞大的用户量,所以微软不敢轻易放弃对.NET Framework的支持。
目前的版本中,.NET Core主要面向Web开发,ASP.NET Core是一个跨平台的高性能开源框架,用于生成基于云且连接 Internet 的新式应用程序。
我们先来看一下,ASP.NET Core的优点:
- 跨平台。
- 内置依赖注入。
- 生成 Web UI 和 Web API 的统一场景。
- 针对可测试性进行构建。
- Razor Pages 可以使基于页面的编码方式更简单高效。
- 能够在 Windows、macOS 和 Linux 上进行开发和运行。
- 开放源代码和以社区为中心。
- 集成新式客户端框架和开发工作流。
- 基于环境的云配置系统。
举一个简单的例子,在传统的MVC下,我们使用如下方式编程:
1: @Html.ActionLink(“这是啥参数”, “这又是啥”, “我靠,这边怎么还有一个”, new { @class = "晕了"})
而在.NET Core下,我们可以这样:
1: <a asp-controller=”user” asp-action=”createuser” class=”mycss”>CreateUser</a>
是不是.NET Core下的编程更加优雅,更像是直接操作HTML,这种例子还有很多,需要自己多多深入了解。
定睛看
如果只是跨平台,可能还不足以吸引广大开发者,毕竟一个新的语言或者框架的问世,更需要很强的开发效率和执行效率。
.NET Core拥有轻型的高性能模块化 HTTP 请求管道。能够在 IIS、Nginx、Apache、Docker 上进行托管或在自己的进程中进行自托管。使用.NET Core 时,可以使用并行应用版本控制。目前的ASP.NET Core已经是一个非常成熟的产品,从ASP.NET MVC/Web API转向非常简单。最显著的原因在于.NET Core应用性能的提高和占用空间的减少,这意味着无论是对于云还是私有数据中心,可真正做到在基础架构上的成本节省。
由于.NET Core的模块化设计,使得.NET Core可以更快的进行版本更新,并能够使用Docker和Kubernetes等容器编排工具跨平台开发和部署应用,这是一项真正的优势。同时.NET Core的模块化设计意味着您只包含所需的依赖关系,这就减少了项目的不必要依赖,发布包也变小了。
我们来看下TechEmpower的测试:
这是2018年2月14日关于Plaintext的测试统计,可以看到.NET Core的排名不是很让人满意,排在了17名,而且还有110个报错
这是2019年3月25日关于Plaintext的测试统计,可以看到.NET Core进步明显,排在了第5名,没有报错,而且跟前面的测试结果很接近。Data updated历史性的占据了第3到第5,Fortunes .net core的排7、8、10、11,Multiple Queries 排第10,Single Query 排第18,Json排第20,查看链接(感谢20楼yywww的提醒)
但这并不意味着.NET Core的性能已经很不错了,事实上,.NETCore在性能方面还有很多工作要做。TechEmpower以ASP.NET Core的Web服务器Kestrel为基准,在“纯文本”基准测试中,表现极佳,在涉及数据库查询等的高级测试中,也表现不错,希望.NET Core能再接再厉,创造更大的辉煌。
另外在性能方面上,很多从.NET Framework迁移过来的代码还有很大的改进空间,相信微软也会进行深入研究,挖掘这些性能问题,并提供更好的解决方案。
如果想要了解更详细的的信息,可以打开TechEmpower网站查看。
当然了,.NET Core也有很多不足的地方,比如AppDomain这块的设计,之前AppDomain基于Windows,是对当前.NET应用进程的逻辑分区,并对同一进程中的各AppDomain实现了隔离,由于其特殊性,.NET Core尚未提供AppDomain功能,希望以后会出现基于AppDomain模型的解决方案。另外,.NET Core、.NET Standard和.NET Framework,还是比较让人感到乱的。
再也忘不掉你容颜
.NET Core目前依然在快速发展中,很多API不断得到丰富,同时ASP.NET Core团队,每周都会举行一次社区直播会议,直播地址http://live.asp.net
最后奉上两张图用以展示.NET Core架构及其扩展组成。
下图是其扩展组成
【春华秋实】.NET Core之只是多看了你一眼的更多相关文章
- SqlHelper——只因为在人群中多看了你一眼
对SQLHelper,还是有一点陌生的,但是大多数人都在使用,我就有一种想了解并使用的意愿,于是查了很多资料,发现一片不错的博客,放在下面,作为自己或读者使用的材料. 一.SqlHelper 出场 不 ...
- SqlHelper——仅仅由于在人群中多看了你一眼
一.SqlHelper 出场 不是由于大家都在用SqlHelper所以才用,是由于连接数据库关闭数据库查询数据库的多了也就加上了SqlHelper.当你的非常多需求都有一个同样的方法的时候我们没有必要 ...
- Java之恋
初次见面那是一个河北的夏天风随沙散落天涯蝴蝶依旧恋着花回首走过的日子手指和键盘之间的梦想之光已恍如昨日 那年我还是一个刚踏进这个曾经只在地理课本上狂念南稻北麦,南油北花的土地那年你只是我必须要学的编程 ...
- .net开源生态,WTM与NCC
天下大势,分久必合,合久必分.改朝换代都如花开花谢,过眼云烟,更别提开发语言的更迭了. 我们所坚持的,只是那最初的感动,那“只是在人群中多看了你一眼”的惊艳.三十年河东,三十年河西,不忘初心,方得始终 ...
- 时间--cd //lastyear
夏木, 天堂里面有没有车来车往,就像当年南京 街头的喧嚣,我知道即使繁华一片,仍是无法填补你心头无底洞般的孤独! 只是因为在人群中多看了你一眼再也无法忘掉你容颜 是不是真的可以一醉解千愁 爱要怎么说出 ...
- android中Sensor 工作流程
JAVA 程序 我们使用 sensor 接口一般只要注册一下 SensorListener 像下面这样 ************************************************ ...
- 【Web探索之旅】第三部分第二课:IP地址和域名
内容简介 1.第三部分第二课:IP地址和域名 2.第三部分第三课预告:协议 第三部分第二课:IP地址和域名 上一课我们说了在Web之中,全球各地有无数台机器,有些充当客户机,有些作为服务器. 那么这些 ...
- 【Linux探索之旅】开宗明义+第一部分第一课:什么是Linux?
内容简介 1.课程大纲 2.第一部分第一课:什么是Linux? 3.第一部分第二课预告:下载Linux,免费的噢! 开宗明义 我们总听到别人说:Linux挺复杂的,是给那些追求逼格的程序员用的.咱 ...
- Python量化交易
资料整理: 1.python量化的一个github 代码 2.原理 + python基础 讲解 3.目前发现不错的两个量化交易 学习平台: 聚宽和优矿在量化交易都是在15年线上布局的,聚宽是15年的新 ...
随机推荐
- csc.exe的环境变量设置
csc.exe使用来编译*.cs文件的,但必须要在安装目录下使用.所以需要设置一下环境变量. C#的环境变量设置 1.“win+R” 打开运行窗口,并输入 “cmd”: 2.运行“set path=% ...
- window10 hello 人脸识别无法启动相机的问题
win10设置人脸识别的时候无法打开相机.但是在qq,其他软件中可以调用相机,可以打开相机的时候.windows hello 就是打不开,不知道怎么回事. 尝试打开电源选项,有一个 选项,还原一下 ...
- java代码之美(12)---CollectionUtils工具类
java代码之美(12)---CollectionUtils工具类 这篇讲的CollectionUtils工具类是在apache下的, 而不是springframework下的CollectionUt ...
- ASP.Net Core MVC 发生二次请求
Bug回忆录 昨天搭建新框架的时候,遇到一个很奇怪的“Bug”,每次请求都会触发两次Aciton,举例子吧,Demo: _Layout.cshtml <!DOCTYPE html> < ...
- DataFrameNaFunctions无fill方法
当我使用 spark2.1 ,为了填补 dataframe 里面的 null 值转换为 0 ,代码如下所示: dataframe.na.fill(0) 出现如下错误 Spark version 2.1 ...
- python接口自动化(十九)--Json 数据处理---实战(详解)
简介 上一篇说了关于json数据处理,是为了断言方便,这篇就带各位小伙伴实战一下.首先捋一下思路,然后根据思路一步一步的去实现和实战,不要一开始就盲目的动手和无头苍蝇一样到处乱撞,撞得头破血流后而放弃 ...
- Java进阶篇之十五 ----- JDK1.8的Lambda、Stream和日期的使用详解(很详细)
前言 本篇主要讲述是Java中JDK1.8的一些新语法特性使用,主要是Lambda.Stream和LocalDate日期的一些使用讲解. Lambda Lambda介绍 Lambda 表达式(lamb ...
- Docker最全教程之使用Docker搭建Java开发环境(十七)
前言 Java是一门面向对象的优秀编程语言,市场占有率极高,但是在容器化实践过程中,发现官方支持并不友好,同时与其他编程语言的基础镜像相比(具体见各语言镜像比较),确实是非常臃肿. 本篇仅作探索,希望 ...
- 使用工厂模式解耦和IoC思想
使用工厂模式解耦. 一.需求场景: 某一层功能需要改动,但其他层代码不变 实现类1:MyDaoImpl查询自己的数据库. ====改为====> 实现类2:MyDaoImpl2从其它地址得到数据 ...
- python3 Flask -day1
window 10 python 3 安装flask 首先打开cmd命令执行窗口切换到Python安装目录的Script,输入pip出现以下页面 这里我们使用virtualenv虚拟开发环境 为什么 ...