Lua在逐行读取时是否一次性将整个文件加载到内存中?

我正在使用以下代码在Lua中加载一个非常大(约16GB)的文件,并遇到了内存问题。我想知道下面的代码是将整个文件加载到内存中,然后逐行迭代,还是一次加载一行?

for line in f:lines() do ... end

是否有更好的方式在Lua中加载大文件?

点赞
用户936986
用户936986

No and yes.

你的代码确实是逐行读取,并且它们在 for 块的 end 后立即离开作用域。然而,Lua 实际上并不会在那个时候释放任何系统内存,而是通过小的垃圾回收步骤定期清理或根据需要一次大扫除。当Lua有内存时,它不会努力清理它的内部存储。

你需要适当地设置GC配置/内存限制,使Lua更加侵略,或者每隔一段合理的时间手动调用 collectgarbage

```markdown

No and yes.

你的代码确实是逐行读取,并且它们在 for 块的 end 后立即离开作用域。然而,Lua 实际上并不会在那个时候释放任何系统内存,而是通过小的垃圾回收步骤定期清理或根据需要一次大扫除。当Lua有内存时,它不会努力清理它的内部存储。

你需要适当地设置GC配置/内存限制,使Lua更加侵略,或者每隔一段合理的时间手动调用 collectgarbage

2016-07-01 12:58:38