当我尝试从CSV文件加载大型数组时,会发生意外情况。该文件有100000行和100列(80mb)。我已经尝试了很多方法来快速加载CSV(因为速度至关重要)。下面的代码第一次工作正常,但是当我第二次运行它时,变量title(String)或redim arrRaw(Variant)会给出一个“内存不足”的状态。错误。重新启动Excel后,它再次正常工作一次。 它们都是本地声明的变量。我曾尝试使用公共声明然后擦除数组,但这种做法很有用。我的系统显示RAM内存没有问题。是否有解决此问题的方法(或解决方案)?
Open filepath For Binary Access Read As #i
Get #i, , res
Close i
title = Split(Right(Left(res, Len(res) - 1), Len(Left(res, Len(res) - 1)) - 1), vbLf)
columnsArr = UBound(Split(title(1), ";"))
rowsArr = UBound(title)
ReDim arrRaw(1 To rowsArr, 1 To columnsArr)
Call timerClock(True)
For i = 0 To rowsArr
TmpAr = Split(title(i), ";")
For j = 0 To UBound(TmpAr) - 1
If IsNumeric(TmpAr(j)) Then
arrRaw(i + 1, j + 1) = TmpAr(j)
Else
arrRaw(i + 1, j + 1) = 0
End If
Next j
Next i
答案 0 :(得分:1)
您是否已将所有变量设置为"没有"工作完成后?
无论如何,我想和你分享一个提示:如果你正在使用" title"中的字符串,请替换所有"对"和"左"函数"对$"和"离开$"。您的结果会快5%或10%。另外,尝试不要做两次或更多次,例如:
Left(res, Len(res) - 1)
...最好将它分配给变量并使用它。
答案 1 :(得分:0)
我不清楚你分配的内容我(i = FreeFile
...?)但是这个免费文件句柄的替代方法可能会更好地清除文件句柄。
Open filepath For Binary Access Read As #1
Get #1, , res
Close #1
无论如何,您自己的代码应该使用Close #i
。