大型VBScript数组会产生"Out of Memory"错误

twh*_*twh 2 arrays vbscript out-of-memory multidimensional-array asp-classic

在Classic ASP(VBScript)中,如果我尝试创建一个大的2维数组,我会收到"Out of Memory"错误.例如,这个

DIM xxx : xxx = 10000
DIM yyy : yyy = 10000
REDIM aaa(xxx, yyy)
Response.End
Run Code Online (Sandbox Code Playgroud)

这个

Microsoft VBScript runtime error '800a0007' 

Out of memory
Run Code Online (Sandbox Code Playgroud)

他们可以使用的另一种数据结构是否可行,或其他一些解决方法?

(2010-01-27)更新:在进一步调查我正在研究的遗留代码时,数组很稀疏.换句话说,仅需要阵列占位符的一部分.像这样:

aaa(0, 0) = 1.23
aaa(101,12) = 1.57
aaa(3020,1200) = 2.58
etc.
Run Code Online (Sandbox Code Playgroud)

我想改变事物来存储这样的值:

aaa(count) = "xxx,yyy,val"
Run Code Online (Sandbox Code Playgroud)

然后使用Split()来获得给定x和y的val,但是每次我知道x和y时,这需要一个耗时的循环遍历数组.有更好的解决方案吗?

Ree*_*sey 11

您正在尝试将数组重新定义为10000 x 10000,即100,000,000个元素.

这是一个Variants数组,它需要一个连续的1.525 GB空间,只需要保存该数组.如果您在应用程序中进行其他工作,并且以32位运行,那么您的处理空间总计将限制为2GB.试图获得一大块有问题的块.

一般来说,我会避免尝试在基于Web的应用程序中进行这么大的分配.这应该保存在数据库中,并根据需要分页.如果您需要对数据进行处理,请在单独的服务中进行,而不是在ASP中进行.

  • +1数组将始终是一个变量数组,大小为16字节,因此分配大约1.5GB. (3认同)