У меня есть графический интерфейс MATLAB (r2016a) с обратным вызовом windowButtonMotionFcn. Внутри обратного вызова находится блок if-elseif-else, который изменяет курсор в зависимости от того, какие оси в графическом интерфейсе мыши закончились. Он работает очень быстро, когда он сталкивается с ситуациями, когда ему нужно что-то изменить, но, согласно профилировщику, занимает значительное количество времени на команде «return».Matlab GUI windowButtonMotionFcn Slow When No Action Taken
Может ли кто-нибудь предложить понимание способа исправить это? Мне кажется, что если он не выполняет какой-либо код, он должен работать быстрее, когда он выходит из функции (т. Е. Не получает зависание на «возврат»), чем когда у него больше кода для выполнения.
Основной контур кода выглядит следующим образом:
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
Я понятия не имею, как работает профайлер для графических интерфейсов, но вы уверены, что линия не занимает больше времени, потому что ее запуск чаще всего, то есть вообще xy не по осям? Вы имеете в виду, что это занимает больше времени * на звонок * или всего? –
Вы действительно хотите туда вернуться? Не приведет ли это к тому, что код выйдет из функции mouseMove до достижения «дополнительного кода, когда курсор находится над осями1/axes2?» – toshiomagic
@AnderBiguri это возможно. Я посмотрю на это. – Timmortal