注册 登录
编程论坛 VB6论坛

VB数组用for循环赋值,很耗时间,有没有优化的办法,谢谢

huangjunxing 发布于 2017-09-28 13:02, 6134 次点击
Dim i As Long
 Dim j As Long
 For i = 0 To 800
    For j = 0 To 800
        B1(2, i, j) = B2(2, i, j)
         B1(1, i, j) = B2(1, i, j)
         B1(0, i, j) = B2(0, i, j)
        
     Next j
 Next i
感觉这个地方十分耗时间,数组B1和B2是两个大小不一样的数组,B1的范围比B2大,用不了CopyMemory
4 回复
#2
xiangyue05102017-09-28 15:57
很耗时间,不应该啊。
复制数组的方法我能想到有几种
1. 楼主的这种方法。
2. 利用动态数组

比如
程序代码:

Sub try()
Dim a(1000, 1000)
Dim b()
For i = 0 To 1000

 For j = 0 To 1000
  a(i, j) = Rnd()

 Next j
Next i

t1 = Now()
b = a
t2 = Now()
MsgBox DateDiff("s", t2, t1)
End Sub

这个计算下来一秒时间都不用,所以不清楚为何你的会耗时间。
3. CopyMemory:个人觉得如果只是上限不一样应该不是问题,最后一项参数是长度,只要确定需要复制的上限是多少。 问题是,你的是多维数组,不清楚这个是在内存中如何排列的。 问题就复杂咯。

看看其他人有什么好的方法吧
#3
风吹过b2017-09-28 17:56
多维数组,复制内容时,建议就是你这种的操作方式。

VB6是编译为机器代码时, 赋值 命令是运算最快的一种指令。

多维数组,如何排列,用命令显示地址,一个一个的显示,显示几个就明白了。
#4
ZHRXJR2017-10-01 06:52
测试了一下, Form_Load过程耗时大概是1秒多一点1.2秒左右(包括加载界面与运行通用过程),Command1_ClIck过程耗时不到1秒,在40-150毫秒之间,因此根本谈不上“很耗时间”!
程序代码:

Dim B1(0 To 10, 0 To 1000, 0 To 1000) As String, B2(0 To 5, 0 To 800, 0 To 800) As String

Private Sub Command1_ClIck()
Dim I As Integer, J As Integer

 For I = 0 To 800
    For J = 0 To 800
        B1(0, I, J) = B2(0, I, J)
        B1(2, I, J) = B2(2, I, J)
        B1(1, I, J) = B2(1, I, J)
     Next J

 Next I
End Sub

Private Sub Form_Load()
Dim I As Integer, J As Integer, X As Integer
For X = 0 To 5

 For I = 0 To 800
    For J = 0 To 800
         Randomize
         B2(X, I, J) = CStr(Int(Rnd * 90 + 100))
     Next J

 Next I

 Next X
End Sub

在VB中,赋值是最快的,如果使用数组拷贝恐怕耗时要慢得多,因为需要一个一个读取数组地址,解压还是使用赋值比较好。
#5
huangjunxing2017-10-01 11:48
回复 4楼 ZHRXJR
谢谢
1