增加for-matlab循环中的内存使用

增加for-matlab循环中的内存使用,matlab,for-loop,Matlab,For Loop,我在for循环中遇到了一个问题,在for循环中,内存使用量一直在逐渐增加,直到没有剩余的RAM。for循环大约需要10000次迭代,每次都应该读取目录中的索引文件,使用fmincon执行一些操作,然后将输出保存到另一个索引csv文件。每个文件都小于1MB,处理20个文件后,内存使用量从1GB增加到2GB。(起初,我以为问题出在使用'parfor',但我意识到,即使在正常的for循环中,我也会看到内存“泄漏”;单击此处回答此问题)。下面的代码,其中'my_func'是我正在最小化的函数。我可以根据

我在for循环中遇到了一个问题,在for循环中,内存使用量一直在逐渐增加,直到没有剩余的RAM。for循环大约需要10000次迭代,每次都应该读取目录中的索引文件,使用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

您是否看到使用的内存(驻留集大小)或分配的内存(虚拟大小)增加了?请参阅此无关的答案,了解这两个大小之间的差异:如果是驻留集大小增加了,请检查在删除其中一个函数后是否停止(
fmincon
csvwrite
)--您可能发现了一个bug。如果是虚拟大小增加了,您可以停止担心。这是正常的,也不重要。函数并不重要,除非您有一些
persistent
global
变量。这不常见,但您能确认这不会发生吗?我不建议放置
try/catch语句。为了能够
尝试
一些代码,Matlab必须设置一个新的工作区/地址空间,并且在每次迭代时都要这样做。如果垃圾收集不如循环快,那么在几次迭代后,您可能会得到许多未发布的资源。请尝试在
t中使用循环来构建代码ry
语句(如有必要,请检查使用
fmincon
csvwrite
可能出现的错误类型,并尝试自行处理)。