内存不足第二次运行

当我尝试从CSV文件加载大型数组时,会发生意想不到的事情。 该文件有100000行和100列(80MB)。 我尝试了很多方法来快速加载CSV(因为速度是本质的)。 下面的代码第一次运行良好,但是当我第二次运行它时,variablestitle(String)或者redim arrRaw(Variant)给出了“内存不足”的错误。 重新启动Excel后,它再次正常工作。 它们都是本地声明的variables。 我试图使用公开声明,然后擦除arrays,但这个diddent工作。 我的系统显示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 

工作完成后,你是否已经把所有variables都设置为“无”?

无论如何,我想和你分享一个提示:如果你正在使用“title”中的string,用“Right $”和“Left $”replace所有的“Right”和“Left”函数。 你会得到一个5或10%的更快的结果。 另外,尽量不要做相同的两次或更多次,如:

 Left(res, Len(res) - 1) 

…将它分配给一个variables并使用它会更好。

我不清楚你分配i = FreeFile …?),但也许这种自由文件句柄的替代方法将清除文件句柄好一点。

 Open filepath For Binary Access Read As #1 Get #1, , res Close #1 

无论如何,你自己的代码应该使用Close #i