.NET Core 2.1 Preview 1发布:更快的构建性能
今天,我們宣布發(fā)布 .NET Core 2.1 Preview 1。這是?.NET Core 2.1?的第一個公開發(fā)布。我們有很大的改進(jìn)希望分享出來,并且渴望得到您的反饋意見,無論是在評論中還是在github中dotnet/core #1297
ASP.NET Core 2.1 Preview 1?和?Entity Framework 2.1 Preview 1?也會在今天發(fā)布。
您可以在 Windows,MacOS 和 Linux 上下載并開始使用 .NET Core 2.1 Preview 1:
.NET Core 2.1 Preview 1 SDK?— 包含 Runtime
.NET Core 2.1 Preview 1 Runtime
您可以使用?Visual Studio 2017 15.6 Preview 6?及更高版本或 Visual Studio Code 來開發(fā) .NET Core 2.1 應(yīng)用程序。我們預(yù)計(jì) Visual Studio for Mac 將在 15.7 版本支持。
ASP.NET Core 2.1 預(yù)覽版不會自動部署到 Azure 應(yīng)用服務(wù)。相應(yīng)的,您可以通過一點(diǎn)點(diǎn)配置來實(shí)現(xiàn)部署到 Azure。
Visual Studio Team Service 將在 .NET Core 2.1 RTM 發(fā)布時支持。
您可以在.NET Core 2.1 Preview 1 發(fā)行說明中看到該發(fā)行版的完整詳細(xì)信息。發(fā)行說明中包含已知問題和解決方法。
非常感謝幫助發(fā)布的每個人。如果沒有你,我們不可能走到現(xiàn)在,當(dāng)我們一起工作到 .NET Core 2.1 RTM 時,我們會繼續(xù)需要你的幫助。
現(xiàn)在讓我們來看看 .NET Core 2.1 Preview 1 發(fā)布中的許多改進(jìn)。與?.NET Core 2.0?一樣,它的發(fā)行版本很大,你會找到多項(xiàng)改進(jìn)措施,以便讓你升級。
主題
.NET Core 2.1 的發(fā)布旨在改進(jìn)以下主題:
更快的構(gòu)建性能
縮小 ASP.NET Core 和 EF Core 之間差距 (原文: Close gaps in ASP.NET Core and EF Core)
改進(jìn)與 .NET Framework 的兼容性
GDPR 和安全
微服務(wù)和Azure
更強(qiáng)大的工程系統(tǒng)
這些主題的一些改進(jìn)尚未在 Preview 1 中進(jìn)行。這些主題會指引我們接下來的工作。
全局工具
.NET Core 現(xiàn)在有一個新部署和擴(kuò)展機(jī)制。這種新體驗(yàn)與 NPM 全局工具非常相似,并且受到 NPM 全局工具的啟發(fā)。
使用以下命令,您可以使用我們發(fā)布的名為?dotnetsay?的示例工具自行嘗試 .NET Core 全局工具(在您安裝 .NET Core 2.1 Preview 1 之后):
dotnet install tool -g dotnetsay dotnetsay一旦你安裝了dotnetsay,你可以直接使用它,只需在你的命令提示符或終端中輸入dotnetsay即可。您可以關(guān)閉終端會話、在終端中切換驅(qū)動器、或者重新啟動機(jī)器,命令仍然在那里。?dotnetsay?現(xiàn)在在你的 path 里。檢查?%USERPROFILE%\.dotnet\tools?或~\.dotnet\tools?來查看計(jì)算機(jī)上的工具安裝位置。
您可以通過查看?donetsay 工具示例?來創(chuàng)建自己的全局工具。
You can create your own global tools by looking at the?donetsay tools sample.
.NET Core 工具是 .NET Core 控制臺應(yīng)用程序,它們是作為 NuGet 包打包和獲取的。默認(rèn)情況下,這些工具是框架依賴的應(yīng)用程序,并包含其所有的 NuGet 依賴項(xiàng)。這意味著默認(rèn)情況下,給定的全局工具將在任何操作系統(tǒng)或芯片架構(gòu)上運(yùn)行。假如您需要在新版本的 Linux 上使用現(xiàn)有工具,只要 .NET Core 在那里工作,您應(yīng)該能夠運(yùn)行該工具。
目前,.NET Core Tools 僅支持全局安裝,并且需要安裝-g參數(shù)。我們也在進(jìn)行各種形式的本地安裝,但這些還沒有準(zhǔn)備好在 Preview 1 中。
我們期望有一個全新的工具生態(tài)系統(tǒng)來為完善 .NET 自身。其中一些工具將專門針對 .NET Core 開發(fā),其中許多工具將具有通用性。這些工具被部署到 NuGet。默認(rèn)情況下,使用?dotnet tool install?在 NuGet.org 上查找工具。
如果你對 dotnetay 很好奇,它是仿照?docker/whalesay?的, 進(jìn)一步是仿照?cowsay?的。 dotnetsay 只是一個?dotnet-bot,他是我們最忙碌的開發(fā)人員之一!
構(gòu)建性能優(yōu)化
.NET Core 2.1 中的構(gòu)建時性能得到了很大的提升,特別是對于增量構(gòu)建。這些改進(jìn)同時適用于命令行上的dotnet build?和 Visual Studio 中的構(gòu)建。 我們對 CLI 工具和 MSBuild 進(jìn)行了改進(jìn),以使這些工具提供更快的體驗(yàn)。
下面的圖表提供了您可以從新版本中獲得的改進(jìn)的具體數(shù)字。您可以看到 .NET Core 2.0,.NET Core 2.1 Preview 1 以及我們預(yù)期 .NET Core RTM 中會達(dá)到的數(shù)值。
您可以嘗試在?mikeharder/dotnet-cli-perf?中自行構(gòu)建相同的代碼,你會得到類似的結(jié)果。請注意,這些改進(jìn)是針對增量構(gòu)建的,因此您只能在第二次構(gòu)建之后看到好處。
次要版本前滾
您現(xiàn)在可以在相同主要版本范圍內(nèi)的較新運(yùn)行時版本上運(yùn)行 .NET Core 應(yīng)用程序。 例如,您將能夠在. NET Core 2.1 上運(yùn)行 .NET Core 2.0 應(yīng)用程序,或者在 .NET Core 2.5 上運(yùn)行 .NET Core 2.1 應(yīng)用程序(如果我們提供這種版本的話)。前滾行為僅適用于次要版本。例如,.NET Core 2.x 應(yīng)用程序永遠(yuǎn)不會自動前滾到 .NET Core 3.0 或更高版本。
如果預(yù)期的 .NET Core 版本可用,則使用它。 如果預(yù)期的 .NET Core 版本在給定的環(huán)境中不可用,則前滾行為僅與此相關(guān)。
您可以使用如下參數(shù)禁用次要版本前滾
環(huán)境變量: DOTNET_ROLL_FORWARD_ON_NO_CANDIDATE_FX=0
runtimeconfig.json: rollForwardOnNoCandidateFx=0
CLI: –roll-forward-on-no-candidate-fx=0
Sockets 性能和 HTTP 托管處理程序
我們對 .NET Core 2.1 中的 sockets 進(jìn)行了重大改進(jìn)。sockets 是傳出和傳入網(wǎng)絡(luò)通信的基礎(chǔ)。在 .NET Core 2.0 中,ASP.NET Kestrel Web 服務(wù)器和 HttpClient 使用 native sockets,而不是 .NET?Socket 類。我們正在改變這種狀況,取而代之的是在 .NET sockets 上建立更高層次的網(wǎng)絡(luò) API。
我們在 Preview 1 中對 sockets 做了三項(xiàng)重要的性能改進(jìn):
支持?Socket/NetworkStream?中的?Span/Memory
改進(jìn)了 Windows 和 Linux 上的性能, 這得益于各種修復(fù)(例如重用 PreAllocatedOverlapped、linux 上的緩存操作對象、linux epoll 通知的改進(jìn)調(diào)度等)
改進(jìn)了 SslStream 的性能, 以及支持 ALPN (HTTP2 所需) 和精簡 SslStream 設(shè)置。
對于 HttpClient,我們徹底重新構(gòu)建了一個名為?SocketHttpHandler?的托管?HttpClientHandler。正如你可能猜到的那樣,它是基于 .NET sockets 和 Span?的 HttpClient 的 C# 實(shí)現(xiàn)。
SocketHttpHandler 最大的勝利就是性能。它比現(xiàn)有的實(shí)現(xiàn)快得多。還有其他好處:
消除對?libcurl?(linux) 和?WinHTTP?(Windows) 的平臺依賴性 - 簡化了開發(fā)、部署和服務(wù)
跨平臺和平臺/依賴項(xiàng)版本的一致行為。(原文:Consistent behavior across platforms and platform/dependency versions)
在 Preview 1 中,您可以選擇使用以下方式之一來使用 SocketHTTPHandler:
環(huán)境變量:?COMPlus_UseManagedHttpClientHandler=true
AppContext:?System.Net.Http.UseManagedHttpClientHandler=true
在 Preview 2 (或 GitHub master 分支) 中, 您將能夠按照您所希望的那樣去new一個處理程序:?new HttpClient(new SocketsHttpHandler())。我們還考慮將新的處理程序設(shè)置為默認(rèn)的, 并將現(xiàn)有的 native handler (基于 libcurl 和 WinHTTP) 作為可選的。
我們?nèi)栽谂?Kestrel 遷移到 sockets。我們還沒有確定計(jì)劃來分享給大家,但您可以自行使用?Sockets 來測試 ASP.NET Core。
您可能想知道在傳入和傳出場景之間如何共享 sockets 改進(jìn)的, 因?yàn)樗鼈兏杏X非常不同。其實(shí)很簡單。如果您是客戶端, 則在服務(wù)器上進(jìn)行連接。如果您是服務(wù)器, 則偵聽并等待連接。一旦建立了連接, 數(shù)據(jù)就可以兩種方式流動, 這從性能的角度來看是至關(guān)重要的。因此, 這些 socket 改進(jìn)應(yīng)改善這兩種情況。
Span, Memoryand friends
我們正在引入一組新的類型來更高效的使用數(shù)組和其他類型的內(nèi)存。它們包含在 Preview 1 中。今天,如果您想傳遞10,000元素數(shù)組的前1000個元素,則需要復(fù)制這1000個元素并將該副本傳遞給調(diào)用者。這種操作在時間和空間上都很昂貴。新的 Span?類型使您可以提供該數(shù)組的虛擬視圖,而無需時間或空間開銷。這也是一個 struct,這意味著沒有分配成本。
Span?和相關(guān)類型提供了來自眾多不同來源(如數(shù)組,堆棧分配和原生代碼)的統(tǒng)一內(nèi)存表示。憑借其分片功能,可以避免在許多情況下進(jìn)行昂貴的復(fù)制和分配,如字符串處理,緩沖區(qū)管理等,并且為不安全的代碼提供了安全的替代方案。我們預(yù)計(jì)這些類型將在性能要求較高的場景中首先使用,但隨后會取代數(shù)組,作為管理 .NET 中大型數(shù)據(jù)塊的主要方式。
就用法而言,您可以從數(shù)組中創(chuàng)建一個Span?:
var arr = new byte[10]; Span<byte> bytes = arr; // Implicit cast from T[] to Span<T>通過使用 span 切片方法的重載, 您可以輕松高效地創(chuàng)建一個范圍來表示/指向此數(shù)組的子集。從那里, 您可以索引到結(jié)果范圍內(nèi), 以便在原始數(shù)組的相關(guān)部分中寫入和讀取數(shù)據(jù):
Span<byte> slicedBytes = bytes.Slice(start: 5, length: 2); slicedBytes[0] = 42; slicedBytes[1] = 43;Assert.Equal(42, slicedBytes[0]);Assert.Equal(43, slicedBytes[1]);Assert.Equal(arr[5], slicedBytes[0]);Assert.Equal(arr[6], slicedBytes[1]); slicedBytes[2] = 44; // Throws IndexOutOfRangeExceptionbytes[2] = 45; // OKAssert.Equal(arr[2], bytes[2]);Assert.Equal(45, arr[2]);Jared Parsons 他的頻道9視頻中提供了一個很棒的介紹?C# 7.2: Understanding Span.
Stephen Toub 有更詳細(xì)的介紹在這個文章里?C# – All About Span: Exploring a New .NET Mainstay.
Windows Compatibility Pack
將現(xiàn)有代碼從 .NET Framework 中移植到 .NET Core 時, 可以使用新的?Windows 兼容性包。與 .NET Core 中提供的內(nèi)容相比, 它提供了額外的 20000 個 API。這包括System.Drawing, EventLog, WMI, 性能計(jì)數(shù)器和 Windows 服務(wù)。
下面的示例演示如何使用 Windows 兼容性包提供的 API 訪問 windows 注冊表。
private static string GetLoggingPath(){ ? ?// Verify the code is running on Windows.if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)){ ? ? ? ?using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Fabrikam\AssetManagement")){ ? ? ? ? ? ?if (key?.GetValue("LoggingDirectoryPath") is string configuredPath) ? ? ? ? ? ? ? ?return configuredPath;}} ? ?// This is either not running on Windows or no logging path was configured,// so just use the path for non-roaming user-specific data files.var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); ? ?return Path.Combine(appDataPath, "Fabrikam", "AssetManagement", "Logging"); }平臺支持
我們期望為 .NET Core 2.1 支持以下操作系統(tǒng):
Windows Client: 7, 8.1, 10 (1607+)
Windows Server: 2008 R2 SP1+
macOS: 10.12+
RHEL: 7+
Fedora: 26+
openSUSE: 42.3+
Debian: 8+
Ubuntu: 14.04, 16.04, 17.10+
SLES: 12+
Alpine: 3.6+
Docker
對于 Docker, 在?microsoft/dotnet?上我們相對于 2.0 做了一些修改:
添加了 Alpine runtime 和 SDK 鏡像 (x64).
添加了 Ubuntu Bionic/18.04, 用于 runtime 和 SDK 鏡像 (x64 and ARM32).
從 debian:stretch 切換到 debian:stretch-slim 的 runtime 鏡像. (x64 and ARM32).
放棄 debian:jessie (runtime and SDK).
這些變化在某種程度上是基于我們在過去六個月中聽到的兩個重復(fù)的反饋信息:
提供更小的鏡像,尤其是 runtime
Provide images with less surface area and/or more frequently updated (than Debian), from a vulnerability standpoint.
我們還重寫了?.NET Core Docker 示例?的說明和代碼。
這些示例提供了更好的說明,并實(shí)現(xiàn)了更多場景,如單元測試和使用 docker registries。 我們希望您找到有用的示例,并且我們計(jì)劃繼續(xù)擴(kuò)展它們。 告訴我們您希望我們添加哪些內(nèi)容以使?.NET Core 和 Docker 更好地協(xié)同工作。
尾聲
感謝您嘗試?.NET Core 2.1 Preview 1. 請嘗試在現(xiàn)有的應(yīng)用程序中使用 .NET Core 2.1 Preview 1,并且請?jiān)囉帽疚慕榻B的新功能。 我們已經(jīng)付出了很多努力使它們更好,但我們需要您的反饋?zhàn)屗鼈兛邕^終點(diǎn)線,以便最終發(fā)布。
再一次感謝所有為發(fā)布做出貢獻(xiàn)的人。 我們非常感謝您提供的所有問題和PR,這些都有助于提供此首次預(yù)覽版。
原文:http://www.cnblogs.com/Rwing/p/announcing-net-core-2-1-preview-1.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的.NET Core 2.1 Preview 1发布:更快的构建性能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ocelot中使用Butterfly实践
- 下一篇: BXUG第11期活动