我发现围绕这个问题的最好的方法是在上面暗示:强制垃圾收集.虽然在MATLAB中无法识别命令forceGarbageCollection,但是建议很好.你想要的命令是
java.lang.System.gc()……这样的野兽.
我正在开展一个项目,其中我正在以40Hz(使用计时器)和一个1000Hz的NIDAQ(使用startBackground())读取2个串行端口并实时绘制它们. MATLAB的并行处理限制确保其中一个过程在任何给定时间都会导致缓冲器阻塞.动画无法跟上,最终冻结等等.我通过确保定义单个绘图并且仅使用set命令更新动画循环内部更改的参数,获得了一些初步成功. (例如图,子图(311),轴([…]),保持,p1 =图(x1,y1,’erasemode’,’xor’,…);等等 – > tic,while(toc< 8)set(p1,'xdata',x1,'ydata',y1)...... 使用set将使您的动画更快,更流畅.但是,如果您在后台进行过多的动画制作,那么您仍会遇到缓冲墙 – 尤其是实时数据输入.垃圾收集是你的答案.它不是瞬时的,所以你不希望它执行每个循环周期,除非你的循环非常长.我的解决方案是在while循环之外设置一个计数器变量,并使用一个mod函数,使它只执行每个’n’个循环(例如counter = 0; while()… counter; if(~mod(counter, n))java.lang.System.gc();依此类推. 这将节省你(并希望其他人)大量的时间和头痛,相信我,你将有MATLAB执行实时数据acq和动画与LabVIEW相提并论.