exponenta event banner

Избегать повторного поиска объектов

При поиске дескрипторов MATLAB ® должен выполнять поиск в иерархии объектов для поиска соответствующих дескрипторов, что занимает много времени. Сохранение дескрипторов, к которым необходимо получить доступ позже, является более быстрым подходом. Индексация массивов обычно выполняется быстрее, чем при использованииfindobj или findall.

Этот код создает 500 линейных объектов, а затем вызывает findobj в цикле.

figure
ax = axes;
for ix=1:500
   line(rand(1,5),rand(1,5),'Tag',num2str(ix),'Parent',ax);
end
drawnow;
for ix=1:500
   h = findobj(ax,'Tag',num2str(ix));
   set(h,'Color',rand(1,3));
end
drawnow;

Лучший подход заключается в сохранении дескрипторов в массиве и индексировании в массиве во втором for цикл.

figure
ax = axes;
h = gobjects(1,500);
for ix = 1:500
   h(ix) = line(rand(1,5),rand(1,5),'Tag',num2str(ix),'Parent',ax);
end
drawnow;
% Index into handle array
for ix=1:500
   set(h(ix),'Color',rand(1,3));
end
drawnow

Ограничение объема поиска

Если поиск дескрипторов необходим, ограничьте число объектов для поиска, указав начальную точку в дереве объектов. Например, укажите начальную точку в качестве фигуры или осей, содержащих объекты, для которых выполняется поиск.

Другим способом ограничения времени, затрачиваемого на поиск объектов, является ограничение глубины поиска. Например, 'flat' поиск ограничивает поиск объектами в определенном массиве дескрипторов.

Используйте findobj и findall функции поиска дескрипторов.

Дополнительные сведения см. в разделе Поиск объектов