VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -