我设法通过适应的使用来解决这个问题
sim_input
和
simOut。
清楚显然不释放内存,Unix系统和删除不工作的话,这些数组,我避免使用明确的初始化
sim_input
外的for循环。此外,我把所有的计算有关
simOut
成一个函数,希望这额外的范围会清除内存。我没有单独检查措施的效果,但我认为主要
sim_input
导致这个问题。
这大约是没有内存泄漏的代码:
start_vals = (0.1, 0.08, 0.06, 0.04, 0.03, 0.02);
stop_vals = (0.04, 0.03, 0.02, 0.01, 0.0, -0.05);
batch_size = 50;
模型=“modelName”;
cnt_exp = 0;
cnt_file = 0;
cnt_batch = 0;
为我= 1:batch_size
sim_input (i) =金宝app Simulink.SimulationInput(模型);
结束
为start_val = start_vals
为stop_val = stop_vals
cnt_exp = cnt_exp + 1;
议员= setParam (MP, start_val, stop_val)
simulation_length = 12;
cnt_batch = cnt_batch + 1;
sim_input (cnt_batch) = sim_input cnt_batch .setVariable (“simulation_length”,simulation_length);
sim_input (cnt_batch) = sim_input cnt_batch .setVariable (“议员”MP);
如果cnt_batch < batch_size
total_runs = cnt_file * batch_size + cnt_exp;
如果total_runs ~ = sum_exp%处理最后一个不完整的批处理
继续;
结束
结束
total_runs = cnt_file * batch_size + cnt_exp;
试一试
result_arr = callParSim (sim_input);
%保存结果
cnt_file = cnt_file + 1;
%重置计数器和数组
cnt_exp = 0;
cnt_batch = 0;
抓错误
警告(“错”)
结束
结束
结束
函数result_arr = callParSim (sim_input)
simOut = parsim (sim_input);
为res = 1:长度(simOut)
%的过程结果,计算result_arr
结束
结束