.NET 비고정 참조
2378 단어 .net
약한 인용(weak reference)은 대상에 대한 인용을 유지할 수 있으며, 쓰레기 수집기가 적당한 쓰레기 수집 시간에 대상을 방출하고 메모리를 회수할 수 있도록 허용한다.가령 하나의 대상이 만들어지면 상대적으로 싸지만 대량의 메모리를 소모해야 한다고 가정한다면, 이 대상을 유지하려면 프로그램에서 사용해야 하지만, 필요할 때 메모리를 회수하는 것을 스팸 수집기에 알려주길 바란다.
비고정 참조는 WeakReference 클래스에서 참조할 수 있습니다.
다음 인스턴스 코드에서 ASP.NET 프로그램이 시작할 때 32KB의 문자열을 만들었습니다. 문자열을 WeakReference 실례에 분배하고, 약한 인용을 Application 대상에 놓아서 나중에 검색할 수 있도록 합니다.ApplicationStart의 bigString 변수가 역할 영역을 벗어나면 문자열 실례에 대한 강력한 인용이 존재하지 않습니다.
void Application_Start(object sender, EventArgs e)
{
String bigString = new String('A', 32768);
WeakReference weakRef = new WeakReference(bigString);
Application.Add("BigString",weakRef);
}
스팸 수집이 발생하기 전에 Application 대상에 접근해서 문자열을 검색할 수 있다면, WeakReference 대상의 Target 속성은 문자열에 대한 대상 인용을 포함합니다.만약 Target 속성이 비어 있다면, 약한 인용된 대상은 이미 스팸 수집을 실행합니다.사용하려면 이 문자열을 다시 만들어야 합니다.그렇지 않으면 Target 속성을 추출하고 bigString 변수로 강력한 참조를 만든 다음 응용 프로그램 시작 부분에서 작성된 문자열 객체를 사용할 수 있습니다.
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) GetBigString(); } private void GetBigString() { WeakReference weakReference; if (Application["BigString"] != null) { weakReference = Application["BigString"] as WeakReference; String bigString; bigString = weakReference.Target as String; if (bigString != null) lbMessage.Text = "BigString retrieved from WeakReference"; else lbMessage.Text = "BigString was garbage collected"; } else lbMessage.Text = "Unable to retrieved BigString From Application"; } protected void btnGC_Click(object sender, EventArgs e) { GC.Collect(); GetBigString(); }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AS를 통한 Module 개발1. ModuleLoader 사용 2. IModuleInfo 사용 ASModuleOne 모듈...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.