我有一个带有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
答案 0 :(得分:1)
这可能与end
of a function often appears in the profiler as taking a lot of time的事实有关。通常,分析器有助于识别代码中的低效率(被称为太多次的函数等),但由于未启用JIT加速,因此实际上并不适合实际对代码进行基准测试。对于基准测试,最好使用timeit
或其他一些功能。
话虽如此,当我实施相同的回调时,我看不到return
声明的性能影响
正如@Ander所指出的那样,您应该注意来电列,因为return
被调用的次数可能比其他更多回调。给定行的默认着色基于总时间,而不是每次调用的时间。