다음을 통해 공유


WeakReference 클래스

개체에 대한 가비지 수집을 허용하면서 개체를 참조하는 약한 참조를 나타냅니다.

네임스페이스: System
어셈블리: mscorlib(mscorlib.dll)

구문

‘선언
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class WeakReference
    Implements ISerializable
‘사용 방법
Dim instance As WeakReference
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public class WeakReference : ISerializable
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public ref class WeakReference : ISerializable
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public class WeakReference implements ISerializable
SerializableAttribute 
ComVisibleAttribute(true) 
public class WeakReference implements ISerializable

설명

공용 언어 런타임 가비지 수집 메커니즘에서는 액세스할 수 없는 개체를 메모리에서 회수합니다. 예를 들어, 개체에 대한 모든 직접 및 간접 참조를 Null 참조(Visual Basic의 경우 Nothing)로 설정하면 모든 참조가 유효하지 않게 되어 이 개체에 액세스할 수 없게 됩니다. 액세스할 수 있는 개체에 대한 참조를 강한 참조라고 합니다.

약한 참조에서도 연결할 수 있는 개체를 참조하는데, 이를 대상이라고 합니다. Target 속성 값을 변수에 할당하여 대상에 대한 강한 참조를 만들 수 있습니다. 그러나 대상에 대한 강한 참조가 없으면 개체에 대한 약한 참조가 있더라도 가비지 수집이 가능합니다.

개체에 대한 가비지 수집이 가능한 시간과 가비지가 수집되는 시간 사이에는 지연이 있을 수 있습니다. 대상이 수집된 후 대상을 검색하려고 하면 null 참조만 검색됩니다. 대상이 아직 수집되지 않았으면 유효한 참조가 검색됩니다.

개체에 Finalize 메서드가 있고 종료하도록 명령한 경우, 가비지 수집에서 해당 개체의 메서드를 호출하여 종료를 수행합니다. 종료된 후 현재 WeakReference 개체의 IsAlive 또는 Target 속성을 사용하여 개체에 액세스하려고 하면 InvalidOperationException이 throw됩니다.

용어

개체와 가비지 수집을 설명하는 데 사용한 일부 전문적인 용어를 알고 있으면 유용합니다. 액세스 가능하고 사용할 수 있는 개체를 활성화 개체라고 합니다. 사용되지 않으며 가비지 수집이 가능한 개체를 비활성화 개체라고 합니다. 비활성화 개체에 강한 참조가 있으면 이 개체는 다시 활성화되어 재활성화된 개체가 됩니다.

WeakReference 개체는 종료 후 대상에 대한 참조가 유지되는지, 즉 약한 참조에서 대상의 재활성화를 추적해야 하는지 여부를 지정할 수 있습니다. 재활성화를 추적하지 않는 약한 참조를 짧은 약한 참조라고 하고, 재활성화를 추적하는 약한 참조를 긴 약한 참조라고 합니다.

성능 고려 사항

WeakReference 개체의 캐시에서 응용 프로그램에 사용되는 개체 집합에 대한 참조를 유지하는 코드 예제에서 WeakReference 클래스를 사용하는 경우가 많습니다. 예를 들어, 개체가 범위를 벗어나서 비활성화되는 경우에는 가비지 수집 메커니즘에서 할당된 메모리를 회수할 수 있습니다.

이 예는 효율적인 메모리 관리 체계를 보여 주는 데 사용되지만 WeakReference 클래스는 메모리 관리 문제에 대한 자동 해결 방법으로 처리되지 않으므로 혼동될 수 있습니다. 여전히 응용 프로그램에 대한 규칙, 즉 캐시에서 유지하거나 제거할 항목에 대한 캐싱 정책을 설정해야 합니다.

.NET Framework 보안

상속 계층 구조

System.Object
  System.WeakReference

스레드로부터의 안전성

이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

플랫폼

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0, 1.0에서 지원

참고 항목

참조

WeakReference 멤버
System 네임스페이스
GC 클래스