2013-07-09 10 views
5

wiem wiedzę poniżej:Jaka jest różnica między krótkim słabym odniesieniem a długim słabym odniesieniem?

Słaby odniesienia pozwala śmieciarza zebrać przedmiot jednocześnie umożliwiając aplikacji na dostęp do obiektu.

Więc jeśli obiekt został odzyskany, musisz go utworzyć ponownie, gdy będzie to konieczne.

Jaka jest różnica między krótkim słabym odniesieniem a długim słabym odniesieniem? I myśleć jak poniżej: (według MSDN)

krótki słaby odniesienia: jeśli GC odzyskać przedmiotu, przy czym obiekt jest bardzo zwolniony.

długa słaba referencja: jeśli GC odzyska obiekt, obiekt nadal istnieje (ponieważ jest buforowany).

Czy ktoś może mi powiedzieć więcej szczegółów?

+1

jest dobrze wyjaśnione tutaj: http://stackoverflow.com/questions/310685/weak-references –

Odpowiedz

5

Krótki

Celem krótkim słabego odniesienia staje się zerowa, gdy obiekt jest odzyskane w śmieci. Słabe odwołanie samo w sobie jest obiektem zarządzanym i podlega wyrzucaniu śmieci tak samo, jak każdy inny zarządzany obiekt inny niż . Krótki, słaby odnośnik jest domyślnym konstruktorem dla WeakReference.

Długie

Długa słaby odniesienia zatrzymanych po Finalize metody obiektu została wywołana. Pozwala to na odtworzenie obiektu, ale stan obiektu pozostaje nieprzewidywalny. Aby użyć długiego odwołania, określ true w konstruktorze WeakReference.

Jeśli typ obiektu nie ma metody Finalize, krótki słaby funkcjonalność odniesienie stosuje i słabych odniesienia jest ważna tylko aż cel są zbierane, które mogą wystąpić w dowolnym czasie po finalizator jest prowadzony.

Aby ustanowić silne odniesienie i ponownie użyć obiektu, należy zastosować właściwość docelową obiektu obiektu WeakReference do typu obiektu. Jeśli właściwość Target zwróci wartość null, obiekt został zebrany; w przeciwnym razie, można nadal używać obiektu, ponieważ aplikacja ma odzyskała silne odniesienie do niego.

Wytyczne do użycia słabe odniesienia

pomocą długich słabe odniesienia tylko wtedy, kiedy to konieczne, jak stan obiektu nieprzewidywalny po zakończeniu. Unikaj używania słabych odniesień do małych obiektów, ponieważ sam wskaźnik może być tak duży, jak lub większy.

Unikaj używania słabych referencji jako automatycznego rozwiązania problemów związanych z zarządzaniem pamięcią . Zamiast tego należy opracować skuteczną strategię buforowania dla obsługi obiektów aplikacji.

Reference

+0

I już wiadomo ten artykuł, ale moje pytanie brzmi, czy GC odzyskać przedmiot, obiekt wciąż istnieje? –

+1

Zastanawiam się, dlaczego ten dokument tak słabo opisuje, co się właściwie dzieje? Krótki słaby punkt odniesienia zostanie unieważniony, gdy jego cel zostanie zakwalifikowany do natychmiastowej finalizacji lub przestanie istnieć, lub gdy słaby odnośnik * sam * stanie się kwalifikowalny do sfinalizowania. Długie słabe odniesienie zostanie unieważnione, gdy jego cel przestanie istnieć lub gdy słabe odniesienie stanie się kwalifikowalne do sfinalizowania. Zwróć uwagę, że słabe referencje mogą zostać unieważnione nawet wtedy, gdy ich cele są aktywne - punkt niewymieniony w dokumentacji! – supercat

Powiązane problemy