LabVIEW / / 2020. 4. 23. 17:41

로컬 변수 및 프로퍼티 노드 를 이용한 값(Value) 차이점

728x90
반응형

최근에 프로그램을 하다 로컬 변수와 프로퍼티 노드를 이용하였을때, 메모리 사용에 대한 궁금중이 다시 생겨 자료를 찾아보았다. 예전에도 보았던 내용인데, 다시 보니 또 새롭다. 

프로그램을 할때, 로컬/글로벌 변수 사용을 자재하라는 내용을 책 혹은 인터넷에서 많이 보았다. 
로컬/글로벌 변수 사용으로 인한 문제점을 뽑아보면 다음 2가지가 크지 않을까 생각된다.경쟁 조건

  • 메모리 사용량 증가

경쟁조건 : 지역 변수를 사용하다보면, 사용하기 쉽다는 이유로 여기저기서 막 사용하는경우가 생긴다.
그렇게 사용하다보면 프로그램은 버그와 함께..

화 나고 ~
시간이 지나면 울고 싶고
그러다 못찾으면 좌절하고 싶어진다.

로컬/글로벌 변수는 최소한으로 사용하는게 좋다.


로컬변수와 프로퍼티 노드를 이용한 값 전달 비교이다.
아래에 보면 NI 홈페이지에서 갈무리한 내용이 있으니 읽어보면 좋을것 같다.
로컬 변수는 사용성이 쉽고, 프론트패널(UI) 업데이트하는데 편리함을 가지고 있다.
프로퍼티 노드는 사용성이 로컬변수보다 조금 어렵고, UI 업데이트하는데 시간이 걸린다.

로컬변수 vs 프로퍼티 노드 시간 비교

for 루프를 10000회 반복하면서 값을 읽었을때, 걸린시간을 측정한것이다.
로컬변수는 0밀리초 프로퍼티 노드는 약 2밀리초에 시간이 걸리는것을 확인할 수 있다.

로컬변수를 많이 사용함으로써 나타나는 단점중에 크다고 생각되는 것은 메모리 사용일 것이다.
로컬변수를 생성할때마다 똑같은 변수가 메모리에 또하나 생긴다. 그럼으로써 메모리 사용은 늘어나게 된다.

NI 글 참고

더보기

1. 로컬 변수

장점

  • 동일한 값을 지속적으로 업데이트 할 때 프런트 패널 업데이트를 방지하는 로직을 내장했습니다. 이렇게하면 프런트 패널을 다시 그릴 수 없습니다.
  • 프로퍼티 노드와 달리 포인터를 참조 해제 할 필요가 없습니다. 따라서 프로퍼티 노드보다 빠릅니다.

장점

  • 동일한 값을 지속적으로 업데이트 할 때 프런트 패널 업데이트를 방지하는 로직을 내장했습니다. 이렇게하면 프런트 패널을 다시 그릴 수 없습니다.
  • 프로퍼티 노드와 달리 포인터를 참조 해제 할 필요가 없습니다. 따라서 프로퍼티 노드보다 빠릅니다.

단점

  • 메모리 집약적인 프로세스. 이들은 컨트롤/인디케이터와 같은 프런트 패널 업데이트 로직을 가지고 있지만, 생성한 각 로컬 변수에 대해 메모리에 데이터의 전체 복사본을 만들어야합니다.
  • 클러스/배열의 단일 항목에는 쓸 수 없고 전체 변수를 업데이트해야합니다.
  • 같은 로컬 변수에 다른 속도로 쓰거나 읽을 때 경쟁 조건이 발생할 수 있습니다.

2. 프로퍼티 노드
장점

  • 로컬 변수와 달리 메모리에 데이터 복사본을 만들지 않습니다.
  • 엄격하지 않은 컨트롤 참조를 사용하는 경우 값의 데이터 유형은 컨트롤의 실제 데이터 유형이 아닌 변형될 수 있습니다.
  • 클러스터 내에서 단일 컨트롤 읽기 및 쓰기 가능
  • SubVI 내에서 프런트 패널 컨트롤을 업데이트하는 데 사용할 수 있습니다.
  • 로컬 변수와 달리 메모리에 데이터 복사본을 만들지 않습니다.
  • 엄격하지 않은 컨트롤 참조를 사용하는 경우 값의 데이터 유형은 컨트롤의 실제 데이터 유형이 아닌 변형될 수 있습니다.
  • 클러스터 내에서 단일 컨트롤 읽기 및 쓰기 가능
  • SubVI 내에서 프런트 패널 컨트롤을 업데이트하는 데 사용할 수 있습니다.

단점

  • 프런트 패널 항목을 호출 할 때마다 업데이트해야합니다.
  • 그것들은 pass by value 함수가 아닌  pass by reference 함수입니다. 이는 본질적으로 특정 메모리 위치에 대한 포인터임을 의미합니다. 포인터는 참조 해제되어야하며 메모리의 값이 업데이트됩니다. 변수를 참조 해제하는 과정에서 컨트롤/인디케이터 또는 로컬 변수보다 속도가 느려집니다.
  • 프로퍼티 노드는 SubVI의 프런트 패널이 메모리에 남아 있도록하여 메모리 사용을 증가시킵니다. SubVI의 프런트 패널이 표시되지 않으면 프로퍼티 노드를 제거하여 메모리 사용을 줄이십시오.

 

참조 글

 

728x90
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유