【问题标题】:Matlab GUI windowButtonMotionFcn slows down when number of GUI object gets larger当GUI对象的数量变大时,Matlab GUI windowButtonMotionFcn会变慢
【发布时间】:2014-10-29 22:49:43
【问题描述】:
我现在正在编写一个 Matlab GUI,用于在用户更改光标位置时访问轴上的当前光标点。然而,我发现一个奇怪的现象是 windowButtonMotionFcn 的速度随着 GUI 对象数量的增加而变慢。下面是结果
http://i.stack.imgur.com/fwjCK.jpg
我将所有 GUI 对象的属性设置为默认值,我运行的 Matlab 版本是 Matlab 2012a。当 GUI 对象的数量增加时,是否有任何可能的方法来保持 windowButtonMotionFcn 的速度?
感谢您的关注和帮助。
迈里克
【问题讨论】:
标签:
performance
matlab
matlab-guide
motionevent
processing-efficiency
【解决方案1】:
我不知道事件handlig 是如何在matlab 中实现的。然而,更多的 gui 对象会减慢这个过程似乎是合理的。可以把它想象成,更多的 gui 对象需要更多的内存、更多的对象要处理、更多的代码、更长的列表来搜索……我还经历过使用 GUIDE 创建的 GUI 通常比手工制作的 GUI 慢。这无论如何都没有经过测试,因此没有得到证实。但是,当我在 GUI 中不需要太多对象时,我通常更喜欢手动创建它们。 GUIDE guis 通常更通用,但在大多数情况下,无论如何只使用部分工具。
【解决方案2】:
尝试使用该图的底层 Java 框架的 MouseMovedCallback:
jFrame = get(handle(hFig), 'JavaFrame');
try
% This works up to R2011a
jClient = jFrame.fFigureClient;
catch
try
% This works from R2008b and up, up to HG2
jClient = jFrame.fHG1Client;
catch
% This works in HG2
jClient = jFrame.fHG2Client;
end
end
jWindow = handle(jClient.getWindow, 'CallbackProperties');
set(jWindow, 'MouseMovedCallback', @matlabCallbackFunction);
【解决方案3】:
我在“减慢”和“内存泄漏”方面遇到了类似的问题。
在仅重绘可见对象之前使用delete(gca) 避免了问题。