[リストへもどる]
一括表示

投稿時間:2003/01/18(Sat) 01:17
投稿者名:mitu
Eメール:
URL :
タイトル:
処理速度
以下のような構造体をもっています。

Type MYDATA
   Data  As Long
   Flag1 As Long
   Flag2 As Long
   Flag3 As Long
   Flag4 As Long
   Flag5 As Long
   Flag6 As Long
   Flag7 As Long
   Flag8 As Long
End Type

Type OPETABLE
   FTime     As Long
   DTime     As Long
   OpeData() As MYDATA
End Type

これに、以下のようにして、データを入れています。

Dim OpeInfo() As OPETABLE
Dim dlist()   As Byte

Redim OpeInfo(20000)

myp = 8 + 16 * 12
Redim dlist((20000 * myp) - 1)


For i = 0 To 20000
   With OpeInfo(i)
      .DTime = myDtime(i)   'myDtime は Long型
      .FTime = myFtime(i)   'myFtime は Long型
    
      Redim .OpeData(15)
      For j = 0 To 15
         With .OpeData(j)

      'Byte型からLong型への変換処理(ByteToLng)をして格納
            .Data = ByteToLng(dlist((i * myp) + (j * 12) + 8), _
                              dlist((i * myp) + (j * 12) + 9), _
                              dlist((i * myp) + (j * 12) + 10), _
                              dlist((i * myp) + (j * 12) + 11))
            .Flag1 = dlist((i * myp) + (j * 12) + 12)
            .Flag2 = dlist((i * myp) + (j * 12) + 13)
            .Flag3 = dlist((i * myp) + (j * 12) + 14)
            .Flag4 = dlist((i * myp) + (j * 12) + 15)
            .Flag5 = dlist((i * myp) + (j * 12) + 16)
            .Flag6 = dlist((i * myp) + (j * 12) + 17)
            .Flag7 = dlist((i * myp) + (j * 12) + 18)
            .Flag8 = dlist((i * myp) + (j * 12) + 19)
         End With
      Next j
   End With
Next i

配列要素の20000と15は可変長です。
この処理だと、大体7,8秒かかってしまいます。
どなたか処理速度が速くなる方法がありましたら、宜しくお願いします。

投稿時間:2003/01/18(Sat) 08:56
投稿者名:batchman
Eメール:batchman@ae.wakwak.com
URL :
タイトル:
Re: 処理速度
繰り返し同じ計算をしているものをFor文の頭で変数に移すようにする。

    1)    For i = 0 To 20000
              A = (i * myp)

    2)    For j = 0 To 15
              B = A + (j * 12)

    3)    .Data = ByteToLng(dlist(B + 8), dlist(B + 9), _
                            dlist(B + 10), dlist(B + 11))
          .Flag1 = dlist(B + 12)
          .Flag2 = dlist(B + 13)
          .Flag3 = dlist(B + 14)
          .Flag4 = dlist(B + 15)
          .Flag5 = dlist(B + 16)
          .Flag6 = dlist(B + 17)
          .Flag7 = dlist(B + 18)
          .Flag8 = dlist(B + 19)

がぱっと見の思いつきです...

投稿時間:2003/01/18(Sat) 14:23
投稿者名:たけ
Eメール:t1114114@yahoo.co.jp
URL :
タイトル:
Re: 処理速度
直接処理とは、関係ないのですが、
For文の時に Stepを使うとFor文の処理速度が速くなりますよ。
参考までに


For i = 0 To 20000 Step 1

Next