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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

.NET点滴:SpanT

發布時間:2023/12/4 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET点滴:SpanT 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

昨天小桂問了一個問題,把一個數組的全部元素加1,有什么好辦法,于是有了下面的分析:

var arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //方法一 foreach (var i in arr) {i++; } //方法二 for (var i = 0; i < arr.Length; i++) {arr[i] += 1; } //方法三 foreach (ref var i in arr.AsSpan()) {i++; }

方法一在編譯時會報錯的,提示如下:無法為"i"賦值,因為它是"foreach"迭代變量,foreach循環時,是通過yield return返回的只讀數據,所以不能給它賦值。

方法二沒有問題,遍歷元素,輪詢加1。

方法三比較有意思了,是通過Span<T>來用ref(可以理解成指針,或引用)的方式來,來指向數組的元素,實現加1。

關于Span<T>,借用官方的一句話:“由于 Span<T>?是任意內存塊(可以是托管內存,本機內存,堆棧內存)的抽象,因此 Span<T>?具有參數的類型和方法的方法將 Span<T>?在任何對象上操作, Span<T>?而不考慮它所封裝的內存類型。”,可以清楚的理解Span<T>的專門作用。

關于方法二和方法三的性能怎么樣,下來是測試代碼和結果,供大家參考:

using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Running;BenchmarkRunner.Run<TestSpan>();public class TestSpan {[Benchmark]public void Demo1(){var arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };foreach (ref var i in arr.AsSpan()){i++;}}[Benchmark]public void Demo2(){var arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };for (var i = 0; i < arr.Length; i++){arr[i] += 1;}} }

結果:

總結

以上是生活随笔為你收集整理的.NET点滴:SpanT的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。