Main Content

반복되는 객체 검색 피하기

핸들을 검색할 때 MATLAB®은 객체 계층 구조를 검색하여 일치하는 핸들을 찾아야 합니다. 이 작업에는 시간이 많이 걸립니다. 나중에 액세스해야 하는 핸들을 미리 저장해 두면 작업이 빨라집니다. findobj 또는 findall을 사용하는 대신 배열 인덱싱을 하는 것이 일반적으로 더 빠릅니다.

다음 코드는 500개의 line 객체를 생성한 후 루프에서 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

검색 범위 제한하기

핸들 검색이 필요할 경우 객체 트리 내의 시작점을 지정하여 검색할 객체의 수를 제한합니다. 예를 들어, 검색할 객체를 포함하는 Figure 또는 좌표축으로 시작점을 지정합니다.

객체 검색에 소비되는 시간을 제한하는 또 다른 방법은 검색의 심도를 제한하는 것입니다. 예를 들어, 'flat' 옵션을 사용하여 findobj를 호출하면 특정 핸들 배열 내의 객체로 검색이 제한됩니다.

findobj 함수와 findall 함수를 사용하여 핸들을 검색합니다.

자세한 내용은 객체 찾기 항목을 참조하십시오.