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

Когда вы ищете указатели, 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

Предельные возможности поиска

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

Другой способ ограничить время, затраченное на поиск объектов, - это ограничить глубину поиска. Для примера, a 'flat' поиск ограничивает поиск объектами в определенном массиве указателей.

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

Для получения дополнительной информации см. Раздел «Поиск объектов»