Arrays VBA Excel 2010数组大小限制
我最近需要在Arrays VBA Excel 2010数组大小限制,arrays,vba,excel,Arrays,Vba,Excel,我最近需要在VBAExcel2010中使用相当大的数组执行计算。然而,令我沮丧的是,我的工作和家庭电脑(一台是PC,另一台是Mac(PC有8GB内存,Mac有4GB)),在我尝试运行我的程序时,不断地抛出相同的内存错误。这让我运行了一些测试来弄清问题的根源 Sub Test1() Dim arr1() As Byte, arr2() As Long ReDim arr1(1 To 268000000) ''These work ReDim arr2(1 To 2680
VBA
Excel2010中使用相当大的数组执行计算。然而,令我沮丧的是,我的工作和家庭电脑(一台是PC,另一台是Mac(PC有8GB内存,Mac有4GB)),在我尝试运行我的程序时,不断地抛出相同的内存错误。这让我运行了一些测试来弄清问题的根源
Sub Test1()
Dim arr1() As Byte, arr2() As Long
ReDim arr1(1 To 268000000) ''These work
ReDim arr2(1 To 268000000)
End Sub
Sub Test2()
Dim arr3() As Byte, arr4() As Long
ReDim arr3(1 To 269000000) '' Both of these fail
ReDim arr4(1 To 269000000)
End Sub
现在,根据,每个维度的索引都受到(2^31)-1
的限制。正如你在上面所看到的,我远没有达到这个临界值,而且非常接近2^28
。根据一些粗略计算,上面每个数组的内存量为:
arr1: 268,000,000 * 1 = 268,000,000 bytes of memory
arr2: 268,000,000 * 8 = 2,144,000,000 bytes of memory
arr3: 269,000,000 * 1 = 269,000,000 bytes of memory
arr4: 269,000,000 * 8 = 2,152,000,000 bytes of memory
您会注意到,arr3
大约是arr2
的1/8
大小,但是当尝试Redim arr3
时,我们会在Redim arr2
工作正常时出现内存不足错误。这是怎么回事???需要注意的是,虽然类似,但并不适用,因为我在两台机器上都有大量内存,只是询问内存,而不是一个数组中可以放入多少个元素。我对arr2
和arr4
都不满意。当我单步执行代码时,arr1
和arr3
都会执行ReDim
,而不会引发错误。MSDN还注意到:“如果试图初始化超过可用RAM数量的数组,公共语言运行库会抛出OutOfMemoryException异常。”“对阵列如何存储在内存中进行任何假设都是不安全的。”对我来说,对于这两个例程,第二个redim炸弹(XL 2010,32位,16 Gb Ram)您使用的是32位还是64位版本的Excel?这会有所不同。有关减少工作簿内存使用的讨论和一些提示,请参阅:所有内容都适用于我,但我运行的是64位Excel 2013,内存为16GB。当我再次尝试使用64位Excel 2010时,这两个例程都可以正常工作。