为什么选择.NETCore?

 为什么选择.NETCore?

在开展话题之前先出一张ASP.NETCore VS  Node.js的性能对比图  ASP.NET Core  VS  node.js

继续正文:

学习新的开发框架是一项巨大的投资。您需要学习如何在新框架中编写,构建,测试,部署和维护应用程序。作为开发人员,有许多框架可供选择,很难知道什么是最适合的。即使您正在使用.NET开发软件,.NET Core也不相同,您需要花时间学习使用它的工具和技术。为了理解为什么.NET Core值得一看,这有助于知道你从哪里开始。

如果您是.NET Framework开发人员

.NET Core是为了重新启动某些Framework组件而为其他人提供跨平台工作的机会。由于.NET Framework主要以托管(C#)代码为基础构建,因此这些部分不需要更改代码即可移至.NET Core。依赖于Windows特定组件的库必须被移除或重构以使用跨平台替代方案。这同样适用于您的应用程序。

您的.NET应用程序可以是跨平台的

您现有的.NET Framework应用程序可以在其他操作系统上工作。对于希望扩大类库的受众平台,或者希望在分布式应用程序的其他领域使用相同代码的开发人员来说,这是非常好的选择。即使你想用你亮瞎眼的MacBook上开发.NET,而无需双启动到Windows。

并不是所有的框架都被移植到.NET Core,但主要的部分。存在一些API差异。例如,如果您使用了大量的反射,则可能需要重构代码才能使用Core。有关更多信息,请看文章末尾的的两者差异部分。

ASP.NETCore胜过框架ASP.NET

ASP.NET Core和ASP.NET之间的性能差异是几个数量级。大部分的ASP.NET被传统的System.Web库所限制。.NET Framework支持旧版本的ASP.NET项目,而且这个约束限制了ASP.NET的发展。微软决定重写整个架构。这意味着打破变化,但结果是值得的。

.NETCore是创新的焦点

向后兼容性是一把双刃剑。这意味着您的应用程序可以继续得到新版本框架的支持,确保在新版本框架中所做的更改不会破坏现有的应用程序。

所有的努力避免变化都限制了框架的创新。框架的变化需要彻底的理由(通常来自客户),详尽的测试以及来自多个层次产品组的批准。

使用.NET Core,团队可以更容易专注的在.net core上工作。比如核心类库(如System.Collections)的更改仍然需要与.NET Framework相同的活力,但是ASP.NET Core或Entity Framework Core可以更轻松地进行实质性更改,而不受向后兼容性的限制。这允许更大的创新。

.NET Framework作为一个整体产品发布,但是Core被分解成多个部分。现在开发人员可以选择使用哪个版本的库,只要它在.NET标准库之外,.NET Core团队就可以用较少的难度进行创新。这就是为什么在将来你只能看到错误修复的框架; .net core将获得所有新功能。

发布周期更快

如果您曾在框架中遇到错误,并将其报告给Microsoft,则您将知道发布修复需要多长时间。这个框架有很长的发布周期,通常至少要测量一年,而且在这些周期中还有很小的窗口用于特性工作。每个代码更改都可能会导致框架中其他位置出现意外的问题。为了给每个团队足够的时间来测试框架,有很多时候代码更改是受限制的或者严格审查的。如果您在.NET中发现了一个错误,最好找到一个解决方法,而不是等待更新。

.NET Core遵循更快的发布步调。开发人员可以使用夜间构建来尽早测试。不属于.NET标准库的库可以按自己的步调发布。因为所有东西都是开源的,如果微软没有足够快的响应,任何开发者都可以提出修补。如果解决方法不被接受,讨论就会公开进行,所有人都可以看到为什么做出这个决定


如果你是.NET新手

在Windows平台上,.NET框架没有太多的竞争。微软可以对从操作系统内核层到高级.NET库的所有内容进行更改。通过将.NET引入其他平台,竞争环境发生了变化。.NET现在必须与其他所有的开发框架竞争。这里有一些东西,使.NET分开。

C#是一个了不起的语言

.NET的旗舰语言C#具有许多独特的功能,例如语言集成查询和异步构造,这使得它强大且易于使用。C#也在不断创新。C#团队公开设计语言,因为他们希望任何人提出建议或参与讨论。编译器(Roslyn)完全是模块化和可扩展的。

ASP.NET Core性能与顶级Web平台相当

如果您正在编写Web应用程序或服务,那么ASP.NET Core是一个很好的搭建平台。它具有出色的性能和低内存占用。许多功能可以使您的应用程序更容易开发和维护。

.NET Core不是从头开始的

.NET在2000年以前就已经出现了。框架代码在过去几年中已经得到了巩固,开发人员也从中受益。已经被移植到Core的大部分Framework代码都没有改变。这使.NET Core在构建应用程序的可靠框架方面领先一步。.NET Core也完全由Microsoft支持。支持可能会阻碍一些组织采用开源软件。这降低了为您的应用程序使用Core的风险。


什么是.NETCore?

为了理解.NET Core,它有助于理解.NET Framework。微软在21世纪初发布了.NET Framework。.NET Framework是一个仅限于Windows的开发框架,它在最底层提供了内存管理,安全性,异常处理和许多其他功能。.NET框架附带一大堆库,可执行从XML解析到HTTP请求的各种功能。它还支持几种语言,并将它们编译成相同的通用中间语言; 任何语言都可以使用任何其他语言构建的库。这些关键概念也出现在.NET Core中。

2016年,微软收购了Xamarin并发布了.NET Core 1.0。之前Xamarin已经移植了.NET框架的大部分内容来运行在基于Linux / Unix的操作系统上。一些代码可以在.NET Framework,Xamarin和新的.NET Core之间共享,但编译后的二进制文件不能。.NET Core的一部分努力是创建一个标准化的平台,允许所有.NET实现共享相同的库。


                          

图1 .NET框架,.NET Core和Xamarin都共享一个称为.NET标准库的标准化平台


以前的Xamarin和.NET Framework之间是无法共享二进制文件的。随着.NET标准库和通用基础架构的推出,这两个框架现在成为统一的.NET生态系统的一部分。

什么是.NETCore?在上图中,似乎.NET Core是另一个包含UWP(通用Windows平台)和ASP.NET Core的框架。为了使.NET Core成为现实,创建了.NET标准库和通用基础架构。


.NETCore的关键功能

.NET Core借鉴了.NET Framework的最佳实践,并将软件工程的最新进展结合在一起。这些是.NET Core的一些显着特征。

扩大您类库的覆盖面

使用.NET Core,您可以使用.NET标准库编写应用程序或库。

然后它可以在许多平台上共享。


图2 .NETCore开发


同一个库可以在后台服务“本地”或云中运行,也可以在手机,平板电脑或桌面上运行的客户端应用程序中运行。与其为iOS,Android和Windows构建单独的应用程序,您可以构建一个适用于所有平台的应用程序。.NET Core是小型和完美的容器,可以轻松扩展并缩短开发时间。

.NET Core和.NET Standard Library建立了一个通用平台。过去,当新版本的操作系统或新设备出现时,开发人员有责任重新构建新平台的应用程序或库,并分发更新。使用.NET Core,不需要重建和重新分配。只要新的平台支持你所有的依赖库,它就支持你的应用程序。

在任何平台上简单部署

Microsoft产品往往具有复杂的安装过程。COM组件,注册表项,特殊文件夹,GAC - 都是为了利用Windows的特性而设计的。.NET框架依赖于这些构造,这使得它不适合其他操作系统。

在发布依赖于.NET Framework的应用程序时,安装程序必须足够聪明才能检测是否安装了错误的.NET Framework版本,并为用户提供正确的方法。大多数现代Windows版本都包含.NET Framework。这使得某些应用程序更容易安装,但是如果应用程序使用默认情况下未安装的功能(如ASP.NET与IIS或WCF组件的集成),则可能会导致复杂的问题。

另一个复杂的问题来自补丁。包括错误修复或安全更新的修补程序可以通过Windows更新或通过Microsoft下载中心分发给客户。您测试应用程序的.NET Framework可能与客户使用的补丁程序不同。当您假定.NET Framework对于所有客户都是一样的时候,通常很难确定在应用程序中导致奇怪行为的原因。

.NET Core的模块化设计意味着您只包含所需的依赖关系。所有这些依赖关系与您的应用程序进入相同的文件夹。部署应用程序与复制文件夹一样简单。这种方法的另一个优点是可以有多个版本并行运行。这个策略对于使所有平台的部署体验保持一致至关重要。

云和容器

在云系统中,用更少的硬件为更高密度的用户提供服务是非常重要的。应用程序的占位面积越小,密度越高。虚拟机已经在云端普遍存在多年,但是它们有几个问题:

  • 大小 - 一个典型的虚拟机文件是千兆字节,如果不是几十千兆字节。这使得它们跨网络传输非常耗时,并且对磁盘空间有很大的要求。

  • 启动时间 - 启动虚拟机意味着启动操作系统。对于Windows来说,这是一个挑战,因为启动新机器需要花费时间。这可以使处理突发交通困难。

  • 内存 - 虚拟机需要将整个操作系统与应用程序一起加载到内存中。这意味着很多主机的内存被浪费了。

  • 不一致性 - 相同的虚拟机可以复制到多个主机,主机必须提供相同的虚拟化硬件,这可能依赖于物理硬件。无法保证虚拟机在任何给定的主机上运行相同的操作。

容器通过虚拟化操作系统来解决虚拟机的问题。容器只包含应用程序及其依赖项。文件大小要小很多倍,启动时间以秒为单位,只有应用程序加载到内存中,容器保证在任何主机上工作。

内置于Windows的.NET Framework不能在容器上运行。鉴于容器的明显优势,.NET Core的设计决定之一就是使其成为模块化。这意味着你的.NETCore应用程序可以被“发布”,使得它和它的所有依赖关系在一个地方,这很容易放入容器。

ASP.NET性能

如果您不熟悉ASP.NET,则是.NET Framework中内置的Web应用程序平台。ASP.NET被许多有影响力的组织所使用,包括Stack Overflow。ASP.NET是2002年发布的第一个.NET Framework版本,并不断发展。尽管ASP.NET取得了成功,但在ASP.NET团队中却感觉到他们正在失去开发人员,因为ASP.NET的性能没有竞争力,只能在Windows平台上运行。

一家名为TechEmpower的公司每隔几个月就会运行一次Web应用程序平台的基准测试,并提供一个分为几类的排名。基准测试在Linux上运行,仅包含Windows平台。对于ASP.NET团队来说,这很麻烦。许多平台都用于编写跨平台的Web应用程序,并且其性能数据令人印象深刻。此外,一些Java框架发布了天文数字,例如每秒570万个明文请求,或者490万个。


图3  TechEmpower基准,第12轮


在TechEmpower基准测试的第十一轮中,Mono平台上的ASP.NET MVC被纳入测试。结果不好。Mono上的ASP.NET每秒产生一个微小的2000个明文请求。Mono不是由Microsoft创建的,它不会像普通的.NET Framework那样得到相同数量的性能调整。为了获得更公平的比较,ASP.NET团队决定在与TechEmpower相同的硬件上运行.NET 4.6的基准测试。结果是每秒约50,000个请求。仍然没有接近NodeJS(每秒320,000个请求),或TechEmpower列表上的其他任何顶级框架。

可怜的低分并不意外。如前所述,ASP.NET知道改变现状只能通过重写整个架构来清除障碍。这正是发生的事情。

ASP.NET团队着手构建ASP.NET Core,几个月后,该团队庆祝asp.net core每秒超过100万个请求。最新asp.netcore与node.js的性能对比更是让asp.net core的性能优势继续扩大

ASP.NET Core   VS     Node.js

上图中可看出asp.net core的性能优势已经超过node.js数倍,性能对比链接==>       ASP.NET Core  VS  node.js

ASP.NET Core表明了微软思维的转变。微软意识到它必须具有竞争力才能赢得开发者。它还必须在Windows以外的平台上竞争。这是创建.NET Core的原动力。

开源

现代软件开发人员并不满足于寻求功能。当已经有一个满足他们需求的开源项目的时候,尤其如此。当大公司热衷于开源软件时,即使是最忠实的微软开发者也会转向其他框架和库,以便在预算内按时完成自己的项目。如果微软关心“开发人员,开发人员,开发人员”,他们必须做出改变。

公开.NET Framework的源代码是第一步。.NET Framework源代码已经在参考文献source.microsoft.com和GitHub上公开了好几年了。


图4 .NET Framework参考源


从揭露来源到接受外来的贡献是完全不同的。.NET Core开发人员不仅希望获得外部贡献,还希望将社区纳入设计和开发。这导致了更多的透明度。ASP.NET Core团队每周都会在http:// live.asp.net上举行一次社区直播会议。.NET Core的代码从一开始就在GitHub上公开,任何人都可以提出请求。社区成员可以在GitHub中创建错误和功能请求。.NET Core已经标志着微软在开源方面的重大转变。


与.NET Framework的差异

.NET Core不仅是Linux和Mac的.NET Framework。微软并没有移植所有的.NET Framework,而是采取了等待客户想要的方式。必须有足够的客户对框架功能的兴趣来说服微软分配资源来做端口。移植的障碍之一是最初建立这些功能的团队大部分已经移动。幸运的是,对于ASP.NET客户来说,ASP.NET团队是.NET Core的驱动因素。MVC,Web API和SignalR都可以在.NET Core中找到,或者在路线图上。

框架功能没有移植到.NETCore

我给这个列表提供了可以改变的知识。某些功能不适用于非Windows平台,其他功能将不会由Microsoft推向未来,因为有更好的替换或功能在某些方面有问题(不安全,难以维护等)。 )。

  • WPF / XAML - Windows Presentation Foundation仅适用于用户界面。.NET标准库不包括用户界面库,.NET Core不会提供跨平台的UI框架。这意味着像Windows窗体和系统的东西。绘图不会移植到.NET Core。

  • 事务 - 这个库使创建分布式事务变得容易。它依赖于特定于Windows的组件,使其不易移植到.NET Core。

  • AppDomains - 这些对于隔离程序集来说是非常有用的,而且不会终止进程,这对于允许插件的应用程序来说非常有用。它们依赖于某些Windows特定的构造,这些构造在其他操作系统上不起作用。

  • .NET远程处理 - 远程对象已被REST服务成功。

  • ASMX - 编写已被Web API取代的Web服务的旧方法。

  • Linq to SQL - 由实体框架取代。

  • WCF服务 - Windows Communication Foundation客户端功能在.NET Core中可用,但不能创建服务。

  • WF - Windows Workflow Foundation依赖于XAML,WCF服务以及其他.NET Framework特性之间的事务。

.NET Framework开发人员的微妙变化

有经验的.NET Framework开发人员可能会在.NET Core中遇到一些惊喜。编写新的代码应该是相对直接的,因为你不太可能使用像HashTableor 这样的旧的结构ArrayList。Visual Studio的Intellisense也指出.NET Core是否支持类型,方法,属性等。


图5 Visual Studio IntelliSense指示.NET Core中是否有类或成员可用


。NET可移植性分析器

如果您试图将现有的.NET应用程序转换为.NET Core,那么最好的地方就是.NET可移植性分析器。它既可以作为命令行应用程序,也可以作为Visual Studio插件使用。有许多.NET平台可供选择:


图6 .NET可移植性分析器中提供的目标平台


尽可能使用此工具创建一个详细的报告,提供有用的建议:


图7。.NET可移植性分析器报告


反射

.NET Core中的反射工作方式与.NET Framework中的不同。最明显的区别是,Type班上正常的许多操作不再存在。有些人已经被调到一个新的班级TypeInfo。其他操作在.NET标准库中不可用,并且需要额外的依赖性。

  .NET Framework实现反射

PropertyInfo targetProperty = null;
foreach (var property inowningElement.GetType().GetProperties())
{if (property.Name == this.Name&& property.PropertyType.IsGenericType){

The .NET Core 实现反射.

PropertyInfo targetProperty = null;
foreach (var property in
owningElement.GetType().GetProperties()) 
{
if (property.Name == this.Name && property.PropertyType
.GetTypeInfo().IsGenericType)           
{

❶需要依赖于System.Reflection.TypeExtensions

❷ 许多类型操作移到了TypeInfo


概要

软件开发行业正在不断发展。从语言到框架,工具到方法论,一切都受到挑战和改进。.NET框架已经到了逼到不得不做出改变的时候,以跟上竞争对手。.NETCore是.NET演进过程中必不可少的一步。它将最好的.NET Framework与现代软件开发中使用的实践相结合。诸如可移植性,简单部署,高性能,开放源代码和强大支持等特性使其值得一试。

Why Choose .NET Core?

原文地址:https://www.cnblogs.com/xiaoliangge/p/8373100.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

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

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

相关文章

欢乐纪中某A组赛【2019.7.10】

前言 好烦我最后写对了T1T1T1的808080分结果交错题导致T2T2T2的404040分没了T1T1T1也没拿多那些分。 话说好像ZDYZDYZDY比我还惨 成绩 这里还是按OJOJOJ上的分数排名 JJJ表示初中,HHH表示高中后面加的是几年级 RankRankRankPersonPersonPersonScoreScoreScoreAAA…

用C#编写Linux守护进程

如果要在Red Hat Enterprise Linux上将.NET Core进程作为后台进程运行,则可以创建自定义systemd单元。今天我将为.NET Core编写两个自定义系统单元的例子。一个是运行.NET Core控制台应用程序的一种类型,另一个是运行ASP.NET Core Web应用程序的简单类型…

AWS Lambda现已支持.NET Core 2.0

Amazon宣称.NET Core 2.0现在已经支持AWS Lambda以及无服务器应用程序了。开发者们现在可以使用C#和.NET Core 2.0来为AWS Lambda编写代码和编写运行于AWS的无服务器应用程序了。自2017年2月Amazon开始了对C#编程语言的支持,这使得.NET开发者能够使用.NET Core 1.0运…

Nacos(一)之简介

转载自 什么是 Nacos Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现…

开源纯C#工控网关+组态软件(八)表达式编译器

一、 引子监控画面的主要功能之一就是跟踪下位机变量变化,并将这些变化展现为动画。大部分时候,界面上一个图元组件的某个状态,与单一变量Tag绑定,比如电机的运行态,绑定一个MotorRunning信号;但有些时候…

g4e基础篇#6 了解Git历史记录

Git的版本历史记录采用了与传统集中式版本管理系统完全不同的方式进行组织,在刚开始使用Git的时候我们往往会不知所措,比如看到这样的历史记录。看到这个七拐八拐的图形,你可能完全不知道它代表了什么。其实这正是Git的特别之处,G…

Ray框架QA

Orleans与Akka对比,为什么选用Orleans?答: Akka对参与开发的人员要求更高一些,普遍是专家级别,Orleans框架进一步抽象了一层,结合C#语言特性,能普遍降低开发难度。下面是知乎网友的答案,可以参考…

Nacos(三)之架构

转载自 Nacos 架构 基本架构及概念 服务 (Service) 服务是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)。Nacos 支持主流的服务…

ASP.NET Core Razor页面禁用防伪令牌验证

这篇短文中,我将向您介绍如何ASP.NET Core Razor页面中禁用防伪令牌验证。Razor页面是ASP.NET Core 2.0中增加的一个页面控制器框架,用于构建动态的、数据驱动的网站;支持跨平台开发,可以部署到Windows,Unix和Mac操作系…

ASP.NETCore的Kestrel服务器

什么是Kestrel服务器Kestrel是开源的(GitHub提供的源代码),事件驱动的异步I / O服务器,用于在任何平台上托管ASP.NET应用程序。这是一个监听服务器和一个命令行界面。您将侦听服务器安装在Windows或Linux服务器上,并在…

Polly组件对微服务场景的价值

Polly是一个开源框架,在github上可以找到,被善友大哥收录,也是.App vNext的一员!App vNext:https://github.com/App-vNextGitHub:https://github.com/App-vNext/PollyNanoFabric是一个开源的微服务架构,也是善友大哥推荐的:https://github.com/geffzhang/NanoFabric对于NanoFab…

Nacos(七)之Spring Cloud集成

转载自 Nacos Spring Cloud 快速开始 本文主要面向 Spring Cloud 的使用者,通过两个示例来介绍如何使用 Nacos 来实现分布式环境下的配置管理和服务注册发现。 关于 Nacos Spring Cloud 的详细文档请参看:Nacos Config 和 Nacos Discovery。 通过 Nac…

.NET Core 2.1中改进的堆栈信息

. NET Core 2.1 现在具有可读的异步堆栈信息!使得异步、迭代器和字典 ( key not found ) 中的堆栈更容易追踪!这个大胆的主张意味着什么?要知道,为了确定调用 异步 和 迭代器方法的实际重载,(这在以前&…

微软高管解读财报:努力创新云基础架构

2月1日,微软发布了该公司截至2017年12月31日的2018年第二财季财报(即2017年第四季度)。财报显示,微软第二财季营收为289.18亿美元,比上年同期的258.26亿美元增长了12%。受税改与就业法案相关的一次性费用138亿美元的影…

Nacos(九)之Dubbo 融合 Nacos 成为注册中心

转载自 Dubbo 融合 Nacos 成为注册中心 Nacos 作为 Dubbo 生态系统中重要的注册中心实现,本文将会介绍如何进行 Dubbo 对接 Nacos 注册中心的工作。 预备工作 请确保后台已经启动 Nacos 服务,可先行参考 Nacos 快速入门。 快速上手 Dubbo 融合 Nac…

在.NET Core中处理一个接口多个不同实现的依赖注入问题

前言近段时间在准备公司的技术分享,所以这段时间将大部分时间放在准备分享内容上去了。博客也就停了一下下。在.NET Core中处理依赖注入问题时,往往是定义好了一个操作规范的接口,会有N多个基于不同技术的实现,根据实际情况在项目…

Nacos(十)之Kubernetes Nacos

转载自 Kubernetes Nacos 本项目包含一个可构建的Nacos Docker Image,旨在利用StatefulSets在Kubernetes上部署Nacos 快速开始 Clone 项目 git clone https://github.com/nacos-group/nacos-k8s.git简单例子如果你使用简单方式快速启动,请注意这是没有使用持久化…

.net core连接MongoDB

前两天在学习MongoDB相关的知识,做了个小Demo,做的是省份下面有多少所学校,嗯,做的比较粗暴。。。连接MongoDB首先要通过Nuget添加一个MongoDB的包,下载此包安装完毕后开始写代码了,创建一个省份实体&#…

Nacos(十一)之NacosSync 介绍

转载自 NacosSync 介绍 介绍 NacosSync是一个支持多种注册中心的同步组件,基于Spring boot开发框架,数据层采用Spring Data JPA,遵循了标准的JPA访问规范,支持多种数据源存储,默认使用Hibernate实现,更加方便的支持表的自动创建更新使用了高效的事件异步驱动模型, 支持多种自…

Ocelot 集成Butterfly 实现分布式跟踪

微服务,通常都是用复杂的、大规模分布式集群来实现的。微服务构建在不同的软件模块上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此&#xff0…