我正在使用以下代码在Lua中加载一个非常大的文件(大约16GB)并导致内存不足问题。我想知道是否下面的代码,将整个文件加载到内存中,然后逐行迭代或一次只加载一行?
for line in f:lines() do ... end
有没有更好的方法在Lua中加载大文件?
答案 0 :(得分:0)
不,是的。
你的构造确实逐个读取行,并且在end
for
块之后它们会立即超出作用域。但是,Lua当时并没有实际释放任何系统内存,而是在小型垃圾收集步骤中定期执行,或者按需进行一次大扫描。当Lua确实有内存时,Lua不会费心地清理它的内部存储。
您需要适当地设置GC配置/内存限制,以使Lua更具侵略性,或者每个合理数量的行手动调用collectgarbage
。