Excel VBA和.NET中乘法数组最快的方法

我正在尽可能快地繁殖arrays。 会有非常大的数组,乘以很多次。 我有下面的代码使用嵌套循环,有没有更快的方式做到这一点? 我有数组a()和b(),并且我想使sum(1)= a(1)* b(1)+ a(1)* b(2)+ a(1)* b(3)等等..

目前我在Excel VBA中,但我很快就会转换为VBA.NET。 比在Excel VBA中运行速度要快多less? .net中有更快的方法可以使用吗?

Sub Test() ' Just creating the arrays Dim a() as Integer, b() as Integer, sum() as Integer, i as Integer, j as Integer ReDim a(1 to 3) ReDim b(1 to 3) ReDim sum(1 to 3) For i = 1 to 3 a(i) = 2 * i b(i) = 3 * i Next i ' This is my code I am interested in For i = 1 to 3 For j = 1 to 3 sum(i) = sum(i) + a(i) * b(j) Next j Next i 

除非您的示例过于简化,否则可以通过总结b()值来移除内部循环

 a*p + a*q + a*r + ... + a*z 

相当于

 a * (p+q+r+...+z) 

所以:

 Sub Test() Dim a(), b(), sum(), i As Long, j As Long, tmp, t, n As Long, tmp2 ReDim a(1 To 20000) ReDim b(1 To 50) ReDim sum(1 To 20000) For i = 1 To 20000 a(i) = i / 100 Next i tmp2 = 0 For i = 1 To 50 b(i) = i / 100 tmp2 = tmp2 + b(i) Next i t = Timer For n = 1 To 100 For i = 1 To 20000 For j = 1 To 50 sum(i) = sum(i) + a(i) * b(j) Next j Next i Next n Debug.Print Timer - t ' ~5.5sec ReDim sum(1 To 20000) t = Timer For n = 1 To 100 For i = 1 To 20000 sum(i) = a(i) * tmp2 Next i Next n Debug.Print Timer - t ' ~ 0.1 sec End Sub 

这应该会更快:

 ' This is my code I am interested in For i = 1 to 3 ai = a(i) sumi = 0# For j = 1 to 3 sumi = sumi + ai * b(j) Next j sum(i) = sumi Next i 

减less查找一个数组variables的次数应该会改善,因为现代处理器花费很多时间从内存中读取乘法值。 我也会考虑循环展开 ,但是你必须用高性能的定时器来testing它是否有帮助。