가비지 수집기는 애플리케이션에서 사용 중인 개체를 수집할 수 없지만 애플리케이션의 코드는 해당 개체에 도달할 수 있습니다. 애플리케이션은 개체에 대한 강력한 참조를 가지고 있다고합니다.
약한 참조를 사용하면 가비지 수집기에서 개체를 수집하면서 애플리케이션이 개체에 액세스할 수 있도록 허용합니다. 약한 참조는 강력한 참조가 없을 때 개체가 수집될 때까지 확정되지 않은 시간 동안에만 유효합니다. 약한 참조를 사용하는 경우에도 애플리케이션은 개체에 대한 강력한 참조를 얻어 개체가 수집되는 것을 방지할 수 있습니다. 강력한 참조가 다시 설정되기 전에 가비지 수집기가 먼저 개체를 수집할 위험이 항상 존재합니다.
약한 참조는 많은 메모리를 사용하는 개체에 유용한데, 가비지 수집에 의해 회수될 경우 쉽게 개체를 다시 생성할 수 있기 때문입니다.
Windows Forms 애플리케이션의 트리 뷰가 사용자에게 복잡한 계층적 옵션 선택을 표시한다고 가정합니다. 기본 데이터가 큰 경우 사용자가 애플리케이션의 다른 항목과 관련된 경우 트리를 메모리에 유지하는 것은 비효율적입니다.
사용자가 애플리케이션의 다른 부분으로 전환할 때 클래스를 사용하여 WeakReference 트리에 대한 약한 참조를 만들고 모든 강력한 참조를 삭제할 수 있습니다. 사용자가 트리로 다시 전환하면 애플리케이션은 트리에 대한 강력한 참조를 가져오려고 시도하고, 성공하면 트리를 다시 구성하지 않습니다.
추적할 개체의 인스턴스를 사용하여 WeakReference를 만들어 개체와 약한 참조를 설정하십시오. 코드 예제는 클래스 라이브러리를 참조 WeakReference 하세요.
짧고 긴 약한 참조
짧은 약한 참조 또는 긴 약한 참조를 만들 수 있습니다.
간단한
가비지 수집이 개체를 회수할 때, 짧은 약한 참조의 대상은
null
이 됩니다. 약한 참조는 자체가 관리되는 개체이며, 다른 관리되는 개체와 마찬가지로 가비지 수집의 대상이 됩니다. WeakReference의 매개변수가 없는 생성자는 짧은 약한 참조입니다.길다
긴 약한 참조는 개체의 Finalize 메서드가 호출된 후에 유지됩니다. 이렇게 하면 개체를 다시 만들 수 있지만 개체의 상태는 예측할 수 없습니다.
true
생성자에서 WeakReference를 지정하여 긴 참조를 사용하십시오.개체의 형식에 메서드가 없 Finalize 으면 짧은 약한 참조 기능이 적용되고 대상이 수집될 때까지만 약한 참조가 유효하며 종료자가 실행된 후에 언제든지 발생할 수 있습니다.
강력한 참조를 설정하고 개체를 다시 사용하기 위해 Target의 속성을 개체의 형식으로 WeakReference로 캐스팅하십시오.
Target 속성이 null
을(를) 반환하면 개체가 수집된 것입니다. 그렇지 않으면 애플리케이션이 개체에 대해 강력한 참조를 다시 획득했기 때문에 계속 사용할 수 있습니다.
약한 참조를 사용하기 위한 지침
개체의 상태가 종료 후 예측할 수 없기 때문에 필요한 경우에만 긴 약한 참조를 사용합니다.
포인터 자체가 크거나 클 수 있으므로 작은 개체에 약한 참조를 사용하지 마십시오.
메모리 관리 문제에 대한 자동 솔루션으로 약한 참조를 사용하지 않습니다. 대신 애플리케이션의 개체를 처리하기 위한 효과적인 캐싱 정책을 개발합니다.
참고하십시오
.NET