Предотвращение повторных поисков объектов

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

Для получения дополнительной информации смотрите, Находят Объекты

Была ли эта тема полезной?