日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文

發(fā)布時間:2023/12/4 asp.net 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

寫在開始

  三年前,曾寫過一篇文章:從.NET和Java之爭談IT這個行業(yè),當時遭到某些自認為懂得java就了不起的Javaer抨擊,現(xiàn)在可以致敬偉大的.NET斗士甲骨文了  (JDK8以上都需要收費,Android棄用java作為第一語言,別高興:OpenJDK是甲骨文的).

  《ASP.NET Core 高性能系列》是一套如何編寫高性能Web應(yīng)用技術(shù)系列文章,

我們將從.NET 2開始全面升入.其中我們會討論互聯(lián)網(wǎng)當今熱門的技術(shù)話題:容器、容器編排、服務(wù)治理、RPC等

此文是第一篇,用于此系列的開門篇,后面每周會持續(xù)發(fā)布.

一、Core?2中需要知道的新鮮東西

Core系列有兩個主要產(chǎn)品:

第一個是.NET Core

  它是一個低級別的提供基本庫的框架。?它可以用來編寫控制臺應(yīng)用程序,它也是

更高級別的應(yīng)用程序框架的基礎(chǔ)。?

第二個是ASP.NET Core

  它是一個用于構(gòu)建Web的跨平臺框架

另外.NET Core中的更改也將適用于ASP.NET Core,因為這是基礎(chǔ)?

二、.NET Core 2的新東西

2.1 API范圍更加廣泛

  .NET Core 2的主要焦點是API范圍的大幅增加,在1.*的基礎(chǔ)上增加了兩倍的API,

而且支持.net standard,您也可以引用.NET Framework程序集而無需重新編譯,

只要程序集中的API已在.NET Core中實現(xiàn)就可以正常工作。這意味著更多的Nuget包可以在.NET Core中工作,

ASP.NET Core Library and Framework 支持情況的一個統(tǒng)計站點:https://ANCLAFS.com(有點跟不上了)

2.2?性能的大幅度提升

.NET Core 2.0中一些更有趣的變化是在原始的.NET FrameworkAPI上性能改進

,已經(jīng)對許多框架的實現(xiàn)進行了調(diào)整了數(shù)據(jù)結(jié)構(gòu)。?

下面是一些已經(jīng)看到快速改進的類和方法,已經(jīng)內(nèi)存開銷的減少包括:


List<T>

Queue<T>

SortedSet<T>

ConcurrentQueue<T>

Lazy<T>

Enumerable.Concat()

Enumerable.OrderBy()

Enumerable.ToList()

Enumerable.ToArray()

DeflateStream

SHA256

BigInteger

BinaryFormatter

Regex

WebUtility.UrlDecode()

Encoding.UTF8.GetBytes()

Enum.Parse()

DateTime.ToString()

String.IndexOf()

String.StartsWith()

FileStream

Socket

NetworkStream

SslStream

ThreadPool

SpinLock

  另外,對于.NET Core 2的RyuJIT Just In Time編譯器進行了改進。

僅作為一個示例就能說明說明其優(yōu)秀之處,finally塊現(xiàn)在幾乎與不使用異常一樣高效,

這在沒有拋出異常的正常情況下是有益的。您現(xiàn)在沒有理由不使用try和using{}塊,以及checked檢查

三、ASP.NET Core 2的新東西?

  ASP.NET Core 2利用了.NET Core 2的所有改進,不僅通過即時編譯處理程序縮短了啟動時間,

涵蓋了增加了輸出緩存,本地及分布式緩存(SQLSERVER,REDIS).

3.1 metapackage

  .NET Core包含了一個新metapackage,所以你只用引用一個NuGet項就可以得到所有的東西,metapackage仍然由單個獨立的包組成,

一個新的包修剪功能(new package-trimming)確保如果您不使用包,那么它的二進制文件將不會包含在您的部署中,

即使您使用metapackage 來引用它。設(shè)置Web主機配置也有合理的默認設(shè)置。

您無需單獨添加logging, Kestrel, and IIS。logging也變得更簡單,因為它是建立的在,你再也沒有任何借口不一開始就使用它

3.2 Razor Pages

  無控制器Razor Pages。這正是它聽起來的樣子,而且它允許您使用Razor模板編寫頁面。

它類似于Web Pages產(chǎn)品,不必和WebForm混淆。大家其實覺得是WebForm的卷土重來,個人感覺是滿懷希望的卷土重來,

架構(gòu)做了更多抽象和思考,不會像之前一樣,帶來如此多的狀態(tài)與之相伴.

3.3?新的authentication?模型

  新的?authentication?模型能讓更好地使用了依賴注入, ASP.NETCore Identity?允許你使用OpenID?、OAuth 2

來為你的API獲取訪問tokens .當然你可以研究Identity Server 4?項目,它提供了相同的功能.

3.4?表單請求自動防偽

  你不必再為表單添加防偽token(防止跨越偽造請求) (之前你不得不添加一個attribute在Post方法中進行驗證),

現(xiàn)在這一切都是自動的.

3.5性能提升

?  ASP.NET Core有一些額外的與.NET Core無關(guān)的性能提升:

啟動時間通過即時編譯處理明顯減少,雖然這不是ASP.NET Core 2的新功能;

?output caching依然可用,在1.0時,只有response caching*(簡化了如何設(shè)置http header),

1.1?時,添加了memory cache,現(xiàn)在你可以還使用分布式緩存()SQL Server or Redis)?

四?.NET Standard?2.0

  .NET Standard 是一套正式的 .NET API 規(guī)范,目標是在所有 .NET 實現(xiàn)中推出。推出 .NET Standard 的背后動機是要提高 .NET 生態(tài)系統(tǒng)中的一致性。

ECMA 335 持續(xù)為 .NET 實現(xiàn)行為建立統(tǒng)一性,但適用于 .NET 庫實現(xiàn)的 .NET 基類庫 (BCL) 沒有類似的規(guī)范。

.NET Framework 4.6.1實現(xiàn)了.NET Standard ?2.0.

.NET Standard 可實現(xiàn)以下重要情境:

1.為要實現(xiàn)的所有 .NET 實現(xiàn)定義一組統(tǒng)一的、與工作負荷無關(guān)的 BCL API。

2.使開發(fā)人員能夠通過同一組 API 生成可在各種 .NET 實現(xiàn)中使用的可移植庫。

3.減少甚至消除由于 .NET API 方面的原因而對共享源代碼進行的條件性編譯(僅適用于 OS API)。?

五、C# 6.0語言級別的新東西

5.1?屬性可以連帶賦值

5.2?導(dǎo)入靜態(tài)類

5.3?字符串格式化的變化

5.4?空值運算符

5.5?對象初始化器

可以通過索引的方式進行賦值

1

2

3

4

5

IDictionary<int,?string> dictNew =?new?Dictionary<int,?string>()

{

???????[4] =?"first",

???????[5] =?"second"

};

5.6?異常過濾器

int?exceptionValue = 10;

try

{

???????Int32.Parse("s");

}

catch?(Exception e) when (exceptionValue > 1)

{

???????Console.WriteLine("catch");

}

5.7 nameof表達式

5.8?在屬性/方法里面使用Lambda表達式

六、C# 7.0語言級別的新東西

6.1 out變量不需要申明了

var?input = ReadLine();

if?(int.TryParse(input, out?var?result))

{

????WriteLine("您輸入的數(shù)字是:{0}",result);

}

else

{

????WriteLine("無法解析輸入...");

}

6.2元組

?元組(Tuple)在 .Net 4.0 的時候就有了,但元組也有些缺點,如:

?? 1)Tuple 會影響代碼的可讀性,因為它的屬性名都是:Item1,Item2.. 。

?? 2)Tuple 還不夠輕量級,因為它是引用類型(Class)。

???備注:上述所指 Tuple 還不夠輕量級,是從某種意義上來說的或者是一種假設(shè),即假設(shè)分配操作非常的多。

?C# 7 中的元組(ValueTuple)解決了上述兩個缺點:

?? 1)ValueTuple 支持語義上的字段命名。

?? 2)ValueTuple 是值類型(Struct)。

傳統(tǒng)的創(chuàng)建方式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

??var?tuple = (1, 2);??????????????????????????

??var?tuple2 = ValueTuple.Create(1, 2);????????

??var?tuple3 =?new?ValueTuple<int,?int>(1, 2);?

??(int?one,?int?two) tuple = (1, 2);

??WriteLine($"first:{tuple.one}, second:{tuple.two}");

??var?tuple2 = (one: 1, two: 2);

??WriteLine($"first:{tuple2.one}, second:{tuple2.two}");

??(int?one,?int?two) tuple3 = (first: 1, second: 2);??

??WriteLine($"first:{tuple3.one}, second:{tuple3.two}");

6.3?解構(gòu)

6.3.1解構(gòu)元組?

6.3.2解構(gòu)可以應(yīng)用于?.Net?的任意類型,

但需要編寫?Deconstruct?方法成員(實例或擴展)

?6.4?模式匹配

6.4.1 is?表達式(is expressions)

6.4.2 switch語句

1

2

3

4

5

6

7

8

9

10

11

12

switch?(item)

??{

??????case?type variable1:

??????????break;

??????case?type variable2 when predicate:

??????????break;

??????default:

??????????break;

??}

6.5?Ref locals and returns

?總結(jié):雖然 C# 7 中提供了局部引用和引用返回,但為了防止濫用所以也有諸多約束,如:

?1. 你不能將一個值分配給 ref 變量,如:

1 ? ref int num = 10; ??// error:無法使用值初始化按引用變量

?2. 你不能返回一個生存期不超過方法作用域的變量引用,如:

1?public?ref?int?GetLocalRef(int?num) => ref?num; ??// error:?無法按引用返回參數(shù),因為它不是?ref?或?out?參數(shù)

?3. ref 不能修飾 “屬性” 和 “索引器”。?

1???var?list = new?List<int>();2???ref?var?n = ref?list.Count; ?// error:?屬性或索引器不能作為?out?或?ref?參數(shù)傳遞

?原理解析:非常簡單就是指針傳遞,并且個人覺得此語法的使用場景非常有限,都是用來處理大對象的,目的是減少GC提高性能。

6.5?局部函數(shù)

6.6.?擴展異步返回類型(Generalized async return types)?

?以前異步的返回類型必須是:Task、Task<T>、void,現(xiàn)在 C# 7 中新增了一種類型:ValueTask<T>,如下所示:

??總結(jié):ValueTask<T> 與 ValueTuple 非常相似,所以就不列舉:ValueTask<T> 與 Task 之間的異同了,\但它們都是為了優(yōu)化特定場景性能而

?新增的類型。??使用 ValueTask<T>?則需要導(dǎo)入:

Install - Package System.Threading.Tasks.Extensions

6.7.?數(shù)字文本語法的改進(Numeric literal syntax improvements)?

?C# 7 還包含兩個新特性:二進制文字、數(shù)字分隔符,如下所示:

?注:二進制文本是以0b(零b)開頭,字母不區(qū)分大小寫;數(shù)字分隔符只有三個地方不能寫:開頭,結(jié)尾,小數(shù)點前后。

?總結(jié):二進制文本,數(shù)字分隔符?可使常量值更具可讀性。

七、異步的優(yōu)化

  盡管如此,異步方法可以返回的內(nèi)容是一些小改進,但是可以在某些情況下提供巨大的性能提升。?你不再需要返回一個Task,如果值已經(jīng)可用, 這可以減少開銷,使用async方法來創(chuàng)建Task對象。

八、總結(jié)

  在這個介紹性章節(jié)中,您看到了一個簡短而高級的摘要,與先前版本相比,.NET Core 2和ASP.NET Core 2眾多變化。

現(xiàn)在,你也知道了.NET Standard 2及其用途。我們展示了C#6和C#7中可用的一些新功能的例子。

這些可能非常有用的是讓你用更少的東西編寫更多東西,并使你的代碼更易讀和更容易維護。

? ? ? ?《ASP.NET Core 高性能系列》這是一本關(guān)于一般Web應(yīng)用程序性能改進的文章,而且很多無視語言或框架的知識。

  下一章中,您將了解性能如何重要,并了解嶄新的新.NET Core開發(fā)棧, 我們還將看到可用的工具,并了解用圖表展示硬件性能。

原文地址:https://www.cnblogs.com/humble/p/11183201.html


.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?

總結(jié)

以上是生活随笔為你收集整理的《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。