반복되는 객체 검색 피하기
핸들을 검색할 때 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
함수를 사용하여 핸들을 검색합니다.
자세한 내용은 객체 찾기 항목을 참조하십시오.