与Excel VBA相比,数组搜索/比较速度慢

时间:2015-07-16 06:36:47

标签: arrays vb.net

我刚刚从VBA(Excel)切换到VB(Visual Studio Express 2013)。 现在我已将部分代码从VBA复制到VB。 现在我想知道为什么VB这么慢...... 我正在创建一个包含4列和大约4000行的数组(IFS_BV_Assy)。 其中有一些相同的内容,因此我将每个条目相互比较,并用空字符串覆盖副本。 守则看起来像这样:

    For i = 1 To counter
        For y = 1 To counter
            If IFS_BV_Assy(1, y) = IFS_BV_Assy(1, i) And i <> y Then
                If IFS_BV_Assy(2, i) < IFS_BV_Assy(2, y) Then
                    IFS_BV_Assy(1, i) = ""
                Else
                    IFS_BV_Assy(1, y) = ""
                End If
                Exit For
            End If
        Next
    Next

计数器是数组的长度。

在VBA中大约需要1秒。在VB中大约需要30秒。通过循环。有人知道为什么吗? (我在每一步之间创建一些时间戳,以确保速度慢。那个循环是坏人)

Array看起来像这样:

  • (1,1)= 12.3.015 /(2,1)= 02
  • (1,2)= 12.3.016 /(2,2)= 01&lt; - 删除
  • (1,3)= 12.3.016 /(2,3)= 02&lt; - 保持,因为02比01更新
  • (1,4)= 12.3.017 /(2,4)= 01
  • (1,5)= 12.3.018 /(2,5)= 01

提前致谢

安迪

编辑:我创建了这样的数组:

    strStartPath_BV_Assy = "\\xxx\xx\xx\"
    myFile = Dir(strStartPath_BV_Assy & "*.*")
    counter = 1
    ReDim IFS_BV_Assy(0 To 2, 0 To 0)
    IFS_BV_Assy(0, 0) = "Pfad"
    IFS_BV_Assy(1, 0) = "Zg."
    IFS_BV_Assy(2, 0) = "Rev"

    Do While myFile <> ""
        If UCase(Right(myFile, 3)) = "DWG" Or UCase(Right(myFile, 3)) = "PDF" Then
            ReDim Preserve IFS_BV_Assy(0 To 2, 0 To counter)
            IFS_BV_Assy(0, counter) = strStartPath_BV_Assy + myFile
            IFS_BV_Assy(1, counter) = Left(Mid(myFile, 12), InStr(1, Mid(myFile, 12), "-") - 1)
            IFS_BV_Assy(2, counter) = Mid(myFile, Len(myFile) - 8, 2)
            counter = counter + 1
        End If
        myFile = Dir()
    Loop

1 个答案:

答案 0 :(得分:0)

Stokke建议创建数组as String而不是Objekt Type。

Dim IFS_BV_Assy(,) as String

我使用Option Explicit Off创建模块,因为我从未发现VBA在这一点上存在任何差异。现在我用Dim .. as ...声明任何变量。 现在,它的速度和VBA一样快=)

学习=犯错误.. =)