麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

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

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

源地址:http://www.companysz.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

內存圖如下:


上一篇:1049. Counting Ones (30)

下一篇:poj2777

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久亚洲成人网 | 亚洲精品 在线播放 | 国产流白浆高潮在线观看 | 国产99精品在线 | 国内精品伊人久久久久网站 | 天使萌一区二区三区免费观看 | 水多视频在线观看 | 日日草日日干 | 成人黄视频在线观看 | 国产精品啪一品二区三区粉嫩 | 黄色a级片免费观看 | 国产精品一区在线免费观看 | 黄视频免费在线观看 | 在线看免费观看日本 | 国产91九色视频 | 96视频在线免费观看 | av手机在线免费播放 | 亚洲一区二区中文字幕在线观看 | 一级做人爱c黑人影片 | 日本aⅴ在线 | 俄罗斯hdxxx| 亚洲精品a级 | 九九热九九| 免费网站看毛片 | 久久久久久久一区二区三区 | 欧美不卡视频在线观看 | 毛片免费视频播放 | 久久亚色 | 国产精品久久久久久久四虎电影 | 在线成人免费观看www | 精品国产乱码久久久久久久 | 国产日韩中文字幕 | 黄色网址你懂的 | 色综合久久久久久久久久久 | 亚洲自拍第二页 | 欧美一级特黄a | 天堂在线中文资源 | 欧美一级免费在线观看 | 国产成人高潮免费观看精品 | 久久91精品 | 免费播放欧美毛片 |