.NET 비고정 참조

2378 단어 .net
하나의 대상 인용을 변수에 분배할 때, 이 변수는 대상에 대한 강력한 인용 (strong reference) 을 포함한다.쓰레기 수집기는 여전히 사용되고 있는 대상을 강제로 인용하지 않는다.변수가 작용역에서 벗어나거나, 변수에null을 표시하면, 강력한 인용이 삭제됩니다.
약한 인용(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();         }

좋은 웹페이지 즐겨찾기