当没有采取任何行动时,Matlab GUI windowButtonMotionFcn缓慢

时间:2017-02-07 13:32:00

标签: matlab user-interface matlab-figure matlab-guide

我有一个带有windowButtonMotionFcn回调的MATLAB(r2016a)GUI。回调内部是一个if-elseif-else块,它根据鼠标结束的GUI中的哪些轴来改变光标。当遇到需要更改内容的情况时,它会非常快速地运行,但根据分析器,它会花费大量时间来返回"返回"命令。

任何人都可以提供有关纠正此问题的方法吗?在我看来,如果它没有执行任何更多的代码,它应该在退出函数时运行得更快(即没有挂在"返回")而不是它有更多的代码要执行的代码。

代码的基本概要如下:

function mouseMove(handles)

xy = %Get cursor position

if %xy over axes1
    set(gcf,'Pointer','crosshair')
elseif %xy over axes2
    set(gcf,'Pointer','arrow')
else
    return %Here is where MATLAB is spending a lot of time
end

%A lot of additional code for when the cursor is over axes1 or axes2.

end

1 个答案:

答案 0 :(得分:1)

这可能与end of a function often appears in the profiler as taking a lot of time的事实有关。通常,分析器有助于识别代码中的低效率(被称为太多次的函数等),但由于未启用JIT加速,因此实际上并不适合实际对代码进行基准测试。对于基准测试,最好使用timeit或其他一些功能。

话虽如此,当我实施相同的回调时,我看不到return声明的性能影响

enter image description here

正如@Ander所指出的那样,您应该注意来电列,因为return被调用的次数可能比其他更多回调。给定行的默认着色基于总时间,而不是每次调用的时间。