.net core和.net framework的比較,.NET Standard

這裏是官方針對這兩個框架給出大方向的區別:

https://docs.microsoft.com/zh-cn/dotnet/standard/choosing-core-framework-server?toc=%2Faspnet%2Fcore%2Ftoc.json&bc=%2Faspnet%2Fcore%2Fbreadcrumb%2Ftoc.json&view=aspnetcore-3.1

目前的時間是2020年3月27,二者的區別總結下來是(後續肯定會有變化)

.Net Core:

  1. 跨平臺
  2. 微服務場景。一套微服務系統主要是包含兩大部分,服務治理部分和子服務部分。服務治理方案有很多,k8s這種就屬於。子服務部分,則屬於具體的業務實現,比如我們可以把QQ的羣功能服務單獨做成一個子服務。開發這個子服務,你可以使用java,也可以使用.net或者其他的語言。開發好之後,只要到服務治理中心註冊一下,其他的服務就可以調用這個服務了。當然你可以通過.net framework開發一套子服務運行在Windows平臺上,然後註冊到服務治理中心。但是當下的微服務基本都是基於Docker的,如果要容器化,就需要使用.net core了。當然你也可以把.net framework放到windows版本的docker上,但這樣太笨重了,.net core輕型化得多。而且現在很多微服務治理框架可以直接支持.net core,開發起來容易得多,如果是使用.net framework開發子服務,你要做的工作可能會很複雜。
  3. 容器化。上面說了,.net framework不是不能放到容器裏,只是它太笨重了,.net core要輕型的多,輕型化,才符合容器的核心思想。官方的原話是:可在 Windows 容器上使用 .NET Framework,但 .NET Core 的模塊化和輕型性質使之成爲容器的更佳選擇
  4. 高性能和可擴展。性能這塊.net core比.net framework好得多。比如針對高性能變成.net core裏面有Span<T>這個東西,如果你翻看官方文檔,你會發現支持的這個的版本並沒有.net framework。一個系統可能正在運行數百個微服務。使用.net core,系統運行的服務器/虛擬機 (VM) 數要低得多。 減少服務器/VM 後可節省基礎結構和託管成本。在可擴展性上,.net core由於在設計時就考慮了微服務這些高可擴展的東西,因此表現要比.net framework優秀得多。
  5. 多版本。.NET Core 可在同一計算機上並行安裝不同版本的 .NET Core 運行時。不過目前.net framework到4.0時也支持了並行版本。但是這個並行主要還是和.net framework3.5並行,不像core的那種幾乎所有版本都可以並行

.Net Framework:

  1. 如果你已有的應用程序只是修改不是擴展,建議不要升級到core。Core和Framework在不少細節上還是有差別的,比如Framework支持Action.BeginInvoke在Core裏面就不支持。如果你想擴展一些功能,則可以使用Core。
  2. 有些第三方包不支持.net core的,這個時候如果你的項目要用到,你就沒發用.net core。針對這一點,官方引入了.net standard。後面我還會說。
  3. 有些技術.net core不支持,3.1版本開始支持Wpf和Winform,但是Winform不可以可視化編輯界面,如果使用Winform,這個時候還是不建議使用Core。Wcf、ASP.NET Web 窗體應用程序這些目前Core都不支持。另外.NET Core 目前支持 Visual Basic 和 F#,但不是所有項目類型都支持的。
  4. 有些平臺不支持.net core。不過這只是過渡,後面都會慢慢支持起來的。

以上是大的方向上的二者的比較,實際上在很多細節上二者也會有不少差別,比如我之前提到的Action.BeginInvoke這種。這些細節,需要在實際開發中去慢慢發現。後續針對這塊我應該還會更新這個博客。

 

下面說一下.NET Standard較詳細的信息可以參考官方文檔:https://docs.microsoft.com/zh-cn/dotnet/standard/net-standard

總結下來就是,.Net Standard是一套官方定義的API 規範,就像有時候我們在開發中爲了給各個開發人員定義好規範以方便整合特意定義一組接口規範一樣。.Net Core和.Net Framework都是實現了這套規範。這樣二者就比較容易兼容起來了。.NET Standard 將取代可移植類庫 (PCL)。所謂可移植類庫,是可以生成爲跨平臺的類庫,比如可以在IOS、Mac等使用。.NET Standard將會取代它是顯而易見的,因爲它的出現就是爲了跨不同的庫。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章