При поиске дескрипторов 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 функции поиска дескрипторов.
Дополнительные сведения см. в разделе Поиск объектов