性能 – MATLAB:GUI逐渐变慢

我一直在编写一些MATLAB GUI(不使用GUIDE),主要用于查看图像和其他一些简单的操作(例如选择点和绘制图像中的一些数据).

GUI启动时,所有操作都会快速执行.
然而,当使用GUI(显示来自3D / 4D卷的不同帧并执行上述操作)时,它开始逐渐变慢,达到对于常见用途来说太慢的点.

我想听听一些有关以下方面的意见:

>找出GUI变慢的原因的可能策略;
>良好的MATLAB GUI编程实践可以避免这种情况;
>解决这些问题的可能参考.

我正在使用set / getappdata将变量保存在GUI的主图中并在函数之间进行通信.

(我希望我能提供一个最小的工作示例,但我不认为它适用于这种情况,因为这只发生在更复杂的GUI中.)

非常感谢.

编辑:(使用探查器报告一些调查结果:)

我曾两次使用剖析器:

>启动GUI后立即;
>玩了一段时间之后,直到它开始变得太慢.

我在两个分析操作中都执行了完全相同的过程,这只是简单地在GUI周围移动鼠标(两次都是相同的“路径”).

分析器结果如下:

我在解释这些结果时遇到困难……
为什么在第二种情况下某些函数(例如impixelinfo)的调用次数如此之大?

任何意见?

非常感谢.

我发现围绕这个问题的最好的方法是在上面暗示:强制垃圾收集.虽然在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相提并论.

相关文章
相关标签/搜索