TestStand UI 종료 시 "PropertyObjects Were Not Released" 경고

업데이트 됨 Sep 24, 2021

해당 제품

소프트웨어

  • TestStand
  • LabVIEW

운영 체제

  • Windows

문의사항

TestStand UI를 종료할 때 PropertyObject가 해제되지 않았다는 경고가 표시됩니다.
다음 중 하나를 수행하고 있습니다.
  • LabVIEW 사용자 인터페이스 (UI) 사용
  • ActiveX 배리언트 와이어를 프로퍼티 객체로 변환하는 LabVIEW 코드가 포함된 TestStand 시퀀스 실행.

해결책

  1. LabVIEW 코드 내에서 닫히지 않은 참조를 확인하십시오. 자세한 내용은 LabVIEW에서 참조 닫기를 참고하십시오.
  2. 열려 있는 모든 참조를 닫았고, LabVIEW 2013 또는 이전 버전을 사용하고 있으며, LabVIEW 코드에 PropertyObjects에 대한 참조를 포함하는 배리언트 와이어가 있는 경우 배리언트와 ActiveX 참조 간의 변환을 내부로 이동해야 합니다. 동적으로 VI를 호출합니다.
    • 이 목적으로 사용할 수 있는 VI를 포함하는 두 개의 zip 파일이 첨부되어 있습니다.
      • LabVIEW 7.1.1을 사용하는 경우 Dynamic Variant to Data 7.1.1.zip을 다운로드하십시오.
      • LabVIEW 8.0 또는 이후 버전을 사용하는 경우 Dynamic Variant to Data 8.0.zip을 다운로드하십시오.
      • 각 zip 파일에는 필요한 VI, 예제 시퀀스 및 동적 VI 사용 방법을 보여주는 예제 VI가 포함되어 있습니다.
      • 첨부된 SubVI를 사용할 때 이미 변형을 변환하고 있는 데이터를 변형 VI에 추가하여 사용해야 합니다. 또한 아래 그림 1과 같이 생성된 참조를 닫아야 합니다.

추가 정보

PropertyObject 누출의 가장 일반적인 원인은 닫히지 않은 참조입니다.
따라서 이 경고는 LabVIEW가 모든 프로퍼티 객체 참조를 해제하기 전에 TestStand 엔진이 종료되기 때문에 발생할 수 있습니다. 참조 닫기 VI를 사용하여 LabVIEW 내에서 열린 모든 참조를 닫는 것이 좋은 LabVIEW 관행입니다.

변형 와이어는 PropertyObject에 대한 참조를 보유할 수도 있습니다. 그러나 배리언트는 명시 적으로 닫을 수 없으며 VI가 메모리를 떠날 때까지 해제되지 않습니다. 이 문제는 LabVIEW 2014에서 수정되었으며 다음 코드 변경이 LabVIEW 2014 이상에서 반드시 필요한 것은 아닙니다.
변형과 ActiveX 참조 사이의 변환을 동적으로 호출된 VI 내부로 이동하면 VI가 실행 완료 시 메모리에서 제거되므로 변형 데이터가 해제됩니다.

배경:
ActiveX 참조는 참조 사용자 수의 참조 수를 유지하여 작동합니다. 이 참조 횟수는 참조가 생성될 때 1로 초기화됩니다. 이 참조의 모든 사본은 참조 횟수를 증가시킵니다. 참조를 제대로 해제하려면 프로그램에서 참조 횟수를 줄여야 합니다. 참조 카운트가 0에 도달하면 시스템이 자동으로 참조를 해제합니다.

LabVIEW에서 참조 카운트는 새로운 와이어가 생성될 때마다 증가하며, 참조 닫기 VI를 호출하면 참조 카운트가 감소합니다. 그러나 새 와이어가 Variant 와이어 인 경우 참조를 명시 적으로 닫을 수 없습니다. 이 경우, 메모리를 해제하고 참조 카운트를 줄이는 유일한 방법은 변형을 포함하는 VI가 메모리를 떠나도록 하는 것입니다.

특히 재 호출 콜백 VI에 의해 처리되는 UIMessage를 사용할 때 VI가 메모리에서 언로드 되었는 지 확인하는 가장 좋은 방법은 동적으로 호출되는 VI를 사용하는 것입니다. 첨부된 VI와 예제는 PropertyObject 누출을 방지하기위한 적절한 사용법을 보여줍니다.