投稿日 | : 2003/11/02(Sun) 15:21 |
投稿者 | : Say |
Eメール | : |
URL | : |
タイトル | : Re^3: 二次元配列の高速アクセス |
> 次元数が増えれば増えるほど遅くなると聞いた覚えがあるのですが、
NET上の情報は玉石混交ですから、自分でテストするのがベストでしょう。
参考までに下記コードではほとんど差が出ません。
私の環境では1次元を2次元として使うより、
素直に2次元配列を使ったほうが微妙に速いようですが、
全要素に対し1000回ループして数十ミリ秒程度の差ですから、
プログラムの速度改善が目的なら、他にもっと見直すところがあるでしょう。
Option Explicit
Private Const iMAX As Long = 100
Private Const jMAX As Long = 100
Private Const iMAX1 As Long = iMAX - 1
Private Const jMAX1 As Long = jMAX - 1
Private Const ijMAX1 As Long = iMAX * jMAX - 1
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private Sub Command1_Click()
Dim lngTime As Long
Dim i As Long, j As Long, k As Long, n As Long, m As Long
Dim a1(ijMAX1) As Long
Dim a2(ijMAX1) As Long
Dim b1(iMAX1, jMAX1) As Long
Dim b2(iMAX1, jMAX1) As Long
'1次元を2次元風にアクセス
m = 0
lngTime = timeGetTime()
For n = 0 To 1000
For i = 0 To iMAX1
For j = 0 To jMAX1
k = i * jMAX + j
a2(k) = a1(k)
m = m + 1
Next
Next
Next
Text1(1).Text = timeGetTime() - lngTime
Text1(0).Text = m
'2次元の場合
m = 0
lngTime = timeGetTime()
For n = 0 To 1000
For i = 0 To iMAX1
For j = 0 To jMAX1
'k = i * jMAX + j
b2(i, j) = b1(i, j)
m = m + 1
Next
Next
Next
Text2(1).Text = timeGetTime() - lngTime
Text2(0).Text = m
End Sub