国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

c#中多維數組技術性能比較

2019-11-14 08:47:35
字體:
來源:轉載
供稿:網友

源地址:http://m.survivalescaperooms.com/yongbufangqi1988/archive/2010/06/10/1755863.html

多維數組的三種技術:安全數組訪問技術、安全交錯數組訪問技術和非安全指針訪問技術。時間 = 數組生成時間 + 數組元素訪問時間1、安全數組訪問技術:創建較快,訪問最慢          安全數組訪問技術最慢。無專用的IL指令。          安全數組對象生成速度較快,數組的空間是連續的,產生的垃圾少。     結論:          如果需要創建大量多維數組,而且并不想頻繁地訪問這些元素,創建多維數組更快一些。2、安全交錯數組訪問技術:創建較慢,訪問較快          交錯數組訪問技術較快。因為有專用的1維0基數組的IL指令。          交錯數組對象生成速度慢,數組的空間是不連續的,產生的垃圾多。      結論:          如果只需要創建一次多維數組,而且要頻繁地訪問該數組中的元素,交錯數組數組訪問較快一些。3、非安全指針訪問技術:創建較快,訪問最快          非安全數組對象生成速度較快,數組的空間是連續的,產生的垃圾少。          非安全數組訪問技術的速度非常快。因為使用了非安全的指針。      結論:          在性能第一的情況下,可采用非安全指針訪問技術。      缺點:              這種技術允許在訪問數組時關閉索引邊界檢查。如果這些內存訪問是在邊界之外,不會拋出異常,          但可能損壞內存中的數據,破壞類型安全性,進而造成安全漏洞。

下面我會根據例子和內存分布圖,來說明他們的性能:

1、安全數組訪問技術:int[,] a=new int[2,3];

在內存中會形成如下圖:

 

c#中clr把多維數組都看做是非0基數組,那么每次clr都會從索引值中減去偏移量來檢查數組是否越界,這樣效率肯定不會有多高。

2、安全交錯數組訪問技術:int[][] a=new int[2][3];

在內存中會形成如下圖所示:

這樣看到這個安全交錯數組實際上是由3個0基一維數組組成,一維0基數組有特殊IL指令,而且這些特殊的IL指令會導致JIT編譯器生成優化的代碼,性能是最佳的,故他要比安全數組性能要好。

3、非安全指針訪問技術:public static int[,] a=new int [,]{{1,2,3},{4,5,6},{7,8,9},{10,11,12}};

public unsafe static void main()

fixed(int* py=&a[2,1])

{

   int* p=py;

 for(int i=0;i<3;i++)

{

p++;

*p=10;

}

foreach(int i in a)

{

console.writeline(i);

}

}

運行結果為:1 2 3 4 5 6 7 8 19 20 21

內存圖如下:


上一篇:1061. 判斷題(15)

下一篇:scanf和printf函數

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 庄浪县| 平山县| 镇原县| 洪湖市| 太白县| 墨脱县| 沙坪坝区| 常山县| 皋兰县| 清新县| 吴堡县| 银川市| 财经| 黑龙江省| 清远市| 广汉市| 桂阳县| 宿松县| 新河县| 微山县| 呼伦贝尔市| 宁夏| 和林格尔县| 乌兰察布市| 无锡市| 韩城市| 洛川县| 边坝县| 同仁县| 丰原市| 平定县| 大同市| 天津市| 色达县| 和平县| 忻城县| 榆树市| 利川市| 台山市| 台中县| 黄平县|