[問題] 陣列的速度消失

看板C_Sharp作者時間17年前 (2008/08/03 23:49), 編輯推噓4(405)
留言9則, 4人參與, 最新討論串1/1
請教大家陣列的速度問題。 同樣大小的兩個陣列,但用不同維度的陣列: double[,] buf1 = double[N,N]; double[] buf2 = double[N*N]; 然後使用 for(int i=0; i<N; i++) { for(int j=0; j<N; j++) { buf1[i,j] = 123.45; // CASE 1 buf2[i*N+j] = 123.45; // CASE 2 } } 差異的部分只有迴圈內的那一行。測試時,N=100,程式執行10000次。 CASE 1: 2.66 sec CASE 2: 1.01 sec 我想瞭解速度差異的原因。 另外,把CASE 1的 i,j 調換成 j,i 並不會讓速度變快。 把CASE 2的 i,j 調換,速度會變慢,但還是遠比CASE 1快。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.0.170 ※ 編輯: kikiapple 來自: 220.133.0.170 (08/03 23:54)

08/04 03:06, , 1F
可以去查查底層上實作有什麼不同就會明瞭了吧
08/04 03:06, 1F

08/04 03:06, , 2F
不過一維陣列沒啥意外的話本來就會是最快的吧 :)
08/04 03:06, 2F

08/04 10:51, , 3F
謝謝樓上 我以為"二維"只是"一維+自動運算index"
08/04 10:51, 3F

08/04 11:00, , 4F
我看Array的definition,沒有this[]與this[,]
08/04 11:00, 4F

08/04 11:00, , 5F
雖然有GetValue(index)與GetValue(indices)
08/04 11:00, 5F

08/04 11:01, , 6F
但是都只能看到prototype,實做應該是看不到?
08/04 11:01, 6F

08/04 12:42, , 7F
實作應當是看不到 要找相關的書才會提到吧~
08/04 12:42, 7F

08/05 09:21, , 8F
純猜測: 二維陣列需check兩次bound
08/05 09:21, 8F

08/05 22:53, , 9F
OS 的 page fault?
08/05 22:53, 9F
文章代碼(AID): #18bTDq8b (C_Sharp)