最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.net中的Span<T>類和Memory<T>類介紹

 更新時(shí)間:2022年07月01日 11:11:56   作者:天方  
這篇文章介紹了.net中的Span<T>類和Memory<T>類,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

.net core 2.1的重頭戲就是性能,其中最重要的兩個(gè)類就是span和memory,本文這里簡(jiǎn)單的介紹一下這兩個(gè)類的使用。

什么是 Span<T>

Span<T> 是新一種新值類型。它表示一段連續(xù)的區(qū)域,它通常和數(shù)組關(guān)聯(lián),表示數(shù)組中的一部分內(nèi)存。

var arr =?new?byte[10];
Span<byte>?bytes?=?arr;

也可以取數(shù)組中的一部分:

var?bytes?=?new?Span<byte>(arr,?3,?5);

初一乍看,span<T>和ArraySegment<T>非常類似,但span更加強(qiáng)大得多,它不但能用于分離數(shù)組,還可以引用棧上的數(shù)據(jù)。

Span<byte>?bytes?=?stackalloc?byte[2];

也可以引用指針數(shù)據(jù),

Span<byte>?bytes;
unsafe?{?bytes?=?new?Span<byte>((byte*)ptr,?1);?}

另外,span還支持 reinterpret_cast 的理念,即可以將 Span<byte> 強(qiáng)制轉(zhuǎn)換為 Span<int>,配合MemoryMarshal類使用,span<T>大多數(shù)的時(shí)候都可以代替指針了。

除了功能更加強(qiáng)大外,span在bcl庫中也得到了更多的支持,大多數(shù)支持?jǐn)?shù)組的函數(shù)現(xiàn)在基本上都能直接支持span了,如:

var?inputSpan?=?input.AsSpan();
int?first =?int.Parse(inputSpan.Slice(3,?5));

這個(gè)函數(shù)中,int.Parse函數(shù)就能直接支持span,并且由于不產(chǎn)生子字符串,比使用substring的方法性能更高。

另外,系統(tǒng)也支持?jǐn)?shù)組類型到span的隱式轉(zhuǎn)換,同時(shí)提供了AsSpan的顯示擴(kuò)展方法,方便將數(shù)組類型轉(zhuǎn)換為span。

除了功能強(qiáng)大外,span的性能也是非常高的,對(duì)span的操作基本上和訪問數(shù)組一樣高,無需通過計(jì)算來確定指針開頭及其起始偏移,因?yàn)?quot;引用"字段本身已對(duì)兩者進(jìn)行了封裝。相比之下,ArraySegment<T> 有單獨(dú)的偏移字段,這就增加了索引編制和數(shù)據(jù)傳遞操作的成本。

什么是 Memory<T>

Span<T>雖然強(qiáng)大而好用,但它只能存在于棧上,而不能存在于堆上,原因主要有如下兩點(diǎn):

  • span包含"引用"字段(如數(shù)組的開頭),這些引用被稱為"內(nèi)部指針"。對(duì)于 .NET 運(yùn)行時(shí)的垃圾回收器,跟蹤這些指針是一項(xiàng)成本相對(duì)高昂的操作。因此,運(yùn)行時(shí)將這些引用約束為僅存在于堆棧上,因?yàn)樗[式規(guī)定了可以存在的內(nèi)部指針數(shù)量下限。
  • 對(duì) Span 執(zhí)行的讀取和寫入操作不是原子操作。如果多個(gè)線程同時(shí)對(duì) Span 在堆上的字段執(zhí)行讀取和寫入操作,存在"撕裂"風(fēng)險(xiǎn)。

這個(gè)限制決定了無法將 Span 裝箱,進(jìn)而無法將 Span<T> 與現(xiàn)有反射調(diào)用 API結(jié)合使用,也無法作為泛型參數(shù)。

對(duì)于大部分同步處理功能,這個(gè)并沒有太大的影響,但由于span<T>無法存儲(chǔ)到堆,從而導(dǎo)致其無法在異步上下文中使用。為了解決這個(gè)問題,.net引入了一個(gè)新類型Memory<T>。

Memory和span的使用方法大同小異,

var?arr =?new?byte[10];
var?bytes?=?new?Memory<byte>(arr,?3,?5);

不同之處在于 Memory<T> 是不類似引用的結(jié)構(gòu),可以存在于堆上。.net bcl庫對(duì)memory也做了很好的支持,如Stream.ReadAsync就能直接支持memory<byte>作為參數(shù)。

另外,也可以從Memory的Span屬性創(chuàng)建指向該Memory的span,這樣也可以使用span的強(qiáng)大的功能。

參考文章:

C# - Span 全面介紹:探索 .NET 新增的重要組成部分

到此這篇關(guān)于.net中Span<T>類和Memory<T>類的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux下使用Jenkins自動(dòng)化構(gòu)建.NET?Core應(yīng)用

    Linux下使用Jenkins自動(dòng)化構(gòu)建.NET?Core應(yīng)用

    這篇文章介紹了Linux下使用Jenkins自動(dòng)化構(gòu)建.NET?Core應(yīng)用的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • asp.net 新聞列表樣式代碼

    asp.net 新聞列表樣式代碼

    asp.net下新聞列表樣式顯示代碼,使用Repeater控件。
    2011-02-02
  • 使.NET6在開發(fā)時(shí)支持IIS

    使.NET6在開發(fā)時(shí)支持IIS

    這篇文章介紹了使.NET6在開發(fā)時(shí)支持IIS的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • IIS部署ASP.NET?Core項(xiàng)目及常見問題總結(jié)

    IIS部署ASP.NET?Core項(xiàng)目及常見問題總結(jié)

    這篇文章介紹了IIS部署ASP.NET?Core項(xiàng)目的方法及常見問題總結(jié),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • c#對(duì)xml的簡(jiǎn)單操作

    c#對(duì)xml的簡(jiǎn)單操作

    c#對(duì)xml的簡(jiǎn)單操作...
    2006-08-08
  • 微軟 Visual Studio 2010官方下載地址給大家

    微軟 Visual Studio 2010官方下載地址給大家

    昨天VS2010在網(wǎng)上報(bào)道都已經(jīng)發(fā)布了,現(xiàn)在今天在網(wǎng)上找到Visual Studio 2010官方下載地址,提供給大家下載。
    2010-04-04
  • ASP.NET Table 表格控件的使用方法

    ASP.NET Table 表格控件的使用方法

    使用 Table 控件可以在 ASP.NET 網(wǎng)頁上創(chuàng)建服務(wù)器可編程的表格。如果要?jiǎng)?chuàng)建的是靜態(tài)表格(運(yùn)行時(shí)不會(huì)在其中添加或更改內(nèi)容的表格),則應(yīng)使用 HTML 表格,而不是 Table 控件。
    2016-04-04
  • 部署ASP.NET?Core程序到Windows系統(tǒng)

    部署ASP.NET?Core程序到Windows系統(tǒng)

    這篇文章介紹了部署ASP.NET?Core程序到Windows系統(tǒng)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • asp.net Timer的使用方法

    asp.net Timer的使用方法

    使用方法很簡(jiǎn)單,對(duì)于需要使用asp.net下timer控件的使用是個(gè)不錯(cuò)的例子
    2008-10-10
  • .NET Framework 4.5新特性介紹

    .NET Framework 4.5新特性介紹

    .NET Framework 4.5新特性介紹,想要使用新版本的朋友可以參考下
    2012-04-04

最新評(píng)論

民勤县| 宁晋县| 灌云县| 宜宾市| 车致| 古丈县| 永平县| 怀来县| 巴林左旗| 鹤山市| 合江县| 荆州市| 商河县| 梧州市| 松溪县| 天门市| 灌云县| 香港| 垦利县| 九龙坡区| 南木林县| 贵南县| 大化| 贵定县| 易门县| 天全县| 武宁县| 阳曲县| 松潘县| 太康县| 宜春市| 肃宁县| 盐亭县| 灵石县| 德保县| 古交市| 兴宁市| 玉田县| 株洲市| 阿尔山市| 墨竹工卡县|