Main Content

Evitar búsquedas repetitivas de los objetos

Cuando busca identificadores, MATLAB® tiene que buscar la jerarquía del objeto para encontrar los identificadores que coincidan, lo que consume tiempo. Guardar los identificadores a los que necesita acceder después es un método más rápido. La indexación de arreglos es, por lo general, más rápida que utilizar las funciones findobj o findall.

Este código crea 500 objetos de línea y, a continuación, llama a findobj en un bucle.

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;

Un método mejor es guardar los identificadores en un arreglo e indexarlos en el arreglo en el segundo bucle 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

Limitar el ámbito de búsqueda

Si es necesario buscar identificadores, limite el número de objetos a buscar especificando un punto de inicio en el árbol de objetos. Por ejemplo, especifique el punto de inicio en la figura o los ejes que contengan los objetos que busca.

Otra forma de limitar el tiempo dedicado a la búsqueda de objetos es restringir la intensidad de la búsqueda. Por ejemplo, llamar a findobj con la opción 'flat' restringe la búsqueda a los objetos en un arreglo de identificadores determinado.

Utilice las funciones findobj y findall para buscar identificadores.

Para obtener más información, consulte Buscar objetos