我遇到了一个for循环问题,在该循环中,内存使用量一直在逐渐增加,直到没有RAM为止。 for循环进行大约10,000次迭代,并且每次循环都应读取目录中的索引文件,使用fmincon执行某些操作,然后将输出保存到另一个索引的csv文件中。每个文件都小于1MB,处理20个文件后,内存使用量将从1GB变为2GB。 (起初,我认为问题出在使用'parfor',但我意识到,即使在普通的for循环中,我也会看到此内存“泄漏”;请单击此处以查看此问题)。下面的代码如下,其中“ my_func”是我要最小化的函数,我可以根据要求提供此函数,但是由于它是“封装的”,所以我认为这没关系。
list = dir('~/Documents/matlab_files/*.csv');
L = length(list);
for i = 1:L
data = readtable(strcat('~/Documents/matlab_files/',list(i).name));
all_para = [0.03,0.3,0.001,0.001];
try
[x,fval] = fmincon(@(all_para)my_func(all_para,data),...
all_para,[],[],[],[],...
[-5,-5,0.01,0.01],...
[5,5,5,5]);
csvwrite(strcat('~/Documents/matlab_files/output/',list(i).name,'.csv'),x);
catch ME
%fprintf('without success: %s\n', ME.message);
%continue; % Jump to next iteration of: for i
end
end
同样,我本来想使用parfor,但我意识到内存使用量的增加也发生在常规for循环中。
我正在使用2018b