Main Content

현명한 객체 생성

객체 오버헤드

그래픽스 객체는 정보(데이터 및 객체 특성)를 저장하고, 특정 이벤트가 발생하는지를 수신 대기하고(콜백 속성), 그래픽스 객체 자신을 수용하도록 다른 객체를 변경할 수 있는(좌표축 제한 업데이트 등) 복잡한 구조체입니다. 따라서, 객체를 생성하는 데는 리소스가 소비됩니다.

성능이 중요한 고려 사항인 경우 최소한의 리소스를 소비하여 원하는 목적을 달성하도록 해야 합니다.

다음 지침을 따르면 종종 성능을 향상시킬 수 있는 경우가 있습니다.

  • 불필요한 객체를 생성하지 않음

  • 객체 계층 구조를 검색하지 않음

불필요한 객체를 생성하지 않음

객체를 덜 생성하면서 동일한 결과를 얻을 수 있는 경우를 찾도록 합니다. 예를 들어, 마커만 표시하는 점으로 구성된 10×1000 배열을 플로팅한다고 가정하겠습니다.

다음 코드는 1000개의 line 객체를 생성합니다.

x = rand(10,1000);
y = rand(10,1000);
plot(x,y,'LineStyle','none','Marker','.','Color','b');

데이터를 10×1000에서 10000×1로 변환합니다. 다음 코드는 동일하게 표시되는 그래프를 생성하지만 단 하나의 객체만 생성합니다.

plot(x(:),y(:),'LineStyle','none','Marker','.','Color','b')

NaN을 사용한 여러 개의 선 시뮬레이션

좌표 데이터에 NaN이 포함된 경우 MATLAB®은 이러한 점을 렌더링하지 않습니다. NaN을 꼭짓점 데이터에 추가하여 별도의 선처럼 보이는 선분을 생성할 수 있습니다. 각 데이터 벡터의 동일한 요소 위치에 NaN을 추가합니다. 예를 들어, 다음 코드는 세 개의 별도의 선을 생성하는 것처럼 보입니다.

x = [0:10,NaN,20:30,NaN,40:50];
y = [0:10,NaN,0:10,NaN,0:10];
line(x,y)

새 객체를 생성하지 않고 데이터 수정하기

기본적으로 동일한 그래프에 있는 다른 데이터를 보려면 전체 그래프를 다시 생성하는 것보다 기존 객체(lines, text 등)의 데이터를 업데이트하는 것이 훨씬 효율적입니다.

예를 들어, 다양한 특정 파라미터의 데이터에 대한 효과를 시각화하고자 한다고 가정하겠습니다.

  1. 사전에 결정할 수 있는 축의 제한을 설정하거나 축 제한 모드를 manual로 설정합니다.

  2. 새 파라미터를 사용하여 데이터를 다시 계산합니다.

  3. 새 데이터를 사용하여 line, text 등 그래프에 사용된 객체의 데이터 속성을 업데이트합니다.

  4. drawnow를 호출하여 Figure(및 Figure에 포함된 모든 자식 객체)를 업데이트합니다.

예를 들어, 데이터가 변경됨에 따라 그래프를 업데이트하고자 한다고 가정하겠습니다.

figure
z = peaks;
h = surf(z);
drawnow 
zlim([min(z(:)), max(z(:))]);
for k = 1:50
   h.ZData = (0.01+sin(2*pi*k/20)*z);
   drawnow
end