【发布时间】:2015-10-14 09:55:59
【问题描述】:
本质上,我在 MATLAB 上批量处理一堆文件(~200 个)
for i = 1:n, process(i); end
process(i) 打开一个文件,读取它并将输出写入另一个文件。 (我没有在此处发布有关 process 的详细信息,因为它有数百行长,而且我承认我并不完全理解代码,是从其他人那里获得的)。
这在每十几个文件之后就会耗尽内存。当然,在 Linux 上,memory 函数不可用,所以我们必须“手动”解决。好吧,我认为有一些内存泄漏,所以让我们在每次运行后发出clear all,即
for i = 1:n, process(i); clear all; end
不走运,这仍然会耗尽内存。在发生这种情况时,who 表示内存中只有两个小数组(
欢迎任何帮助我检测错误来自何处的想法。
【问题讨论】:
-
当您说“内存中只有两个小数组”时,您是指在调用者脚本的工作区还是在“进程”的工作区?在我看来,正在发生的事情是您可能正在读取“进程”需要保存在内存中的大量文件,并且您的机器已达到极限。与其运行 for 循环,不如确定是哪个文件造成了问题,并查看是否可以单独在该文件上运行“进程”。
-
这是在调用者脚本的工作区。你正确
process可以有更大的工作空间,但当然可以单独处理每个文件(例如,通过在每次调用之间重新启动 MATLAB),所以这不是问题。 -
持久变量或类似的东西可能会导致此类问题。不确定如何隔离问题。
-
你可以试试
clear classes,它比clear all更普遍,但即使这样也不会清除像persistent variables这样的所有对象。 -
process中的命令mlock是否有一行?