Avoid Repeated Searches for Objects
When you search for handles, MATLAB® must search the object
hierarchy to find matching handles, which is time-consuming. Saving
handles that you need to access later is a faster approach. Array
indexing is generally faster than using findobj
or findall
.
This code creates 500 line objects and then calls findobj
in
a loop.
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;
A better approach is to save the handles in an array and index
into the array in the second for
loop.
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
Limit Scope of Search
If searching for handles is necessary, limit the number of objects to be searched by specifying a starting point in the object tree. For example, specify the starting point as the figure or axes containing the objects for which you are searching.
Another way to limit the time expended searching for objects is to restrict the depth of the
search. For example, calling findobj
with the
'flat'
option restricts the search to the objects in a specific
handle array.
Use the findobj
and findall
functions to search for handles.
For more information, see Find Objects