Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zbieracz śmieci nie może zebrać obiektu używanego przez aplikację, dopóki kod aplikacji może uzyskać dostęp do tego obiektu. Mówi się, że aplikacja ma silne odwołanie do obiektu.
Słabe odwołanie pozwala modułowi odśmiecania na zebranie obiektu, jednocześnie zezwalając aplikacji na dostęp do niego. Słabe referencje są ważne tylko przez nieokreślony czas, dopóki obiekt nie zostanie zebrany, gdy nie istnieją żadne silne referencje. Jeśli używasz słabego odwołania, aplikacja nadal może uzyskać silne odwołanie do obiektu, co uniemożliwia zbieranie. Jednak zawsze istnieje ryzyko, że moduł odśmiecenia pamięci trafi do obiektu jako pierwszy, zanim zostanie ponownie nawiązane silne odwołanie.
Słabe odwołania są przydatne w przypadku obiektów korzystających z dużej ilości pamięci, ale można je łatwo odtworzyć, jeśli zostaną usunięte przez mechanizm oczyszczania pamięci.
Załóżmy, że widok drzewa w aplikacji Windows Forms wyświetla złożony hierarchiczny wybór opcji dla użytkownika. Jeśli dane bazowe są duże, utrzymywanie drzewa w pamięci jest nieefektywne, gdy użytkownik jest zaangażowany w coś innego w aplikacji.
Gdy użytkownik przełącza się do innej części aplikacji, możesz użyć WeakReference klasy , aby utworzyć słabe odwołanie do drzewa i zniszczyć wszystkie silne odwołania. Gdy użytkownik przełączy się z powrotem do drzewa, aplikacja próbuje uzyskać silne odwołanie do drzewa i, jeśli się powiedzie, unika rekonstrukcji drzewa.
Aby ustanowić słabe odwołanie do obiektu, należy utworzyć WeakReference przy użyciu wystąpienia obiektu, który ma być śledzony. Aby zapoznać się z przykładem kodu, zobacz WeakReference w bibliotece klas.
Krótkie i długie słabe referencje
Możesz utworzyć krótką słabą referencję lub długą słabą referencję.
Krótki
Element docelowy krótkiego słabego odwołania staje się
nullwtedy, gdy obiekt jest odzyskiwany przez zbieranie śmieci. Sam obiekt słabego odwołania jest zarządzany i podlega odzyskiwaniu pamięci, podobnie jak każdy inny obiekt zarządzany. Krótkie słabe odwołanie to konstruktor bez parametrów dla WeakReference.Długi
Długie słabe odwołanie jest zachowywane po wywołaniu metody obiektu Finalize . Umożliwia to ponowne utworzenie obiektu, ale stan obiektu pozostaje nieprzewidywalny. Aby użyć długiego odwołania, określ
truew konstruktorze WeakReference .Jeśli typ obiektu nie ma metody Finalize, jest stosowana funkcja krótkiego słabego odwołania i słabe odwołanie jest prawidłowe tylko do momentu zebrania obiektu docelowego, co może nastąpić w dowolnym momencie po uruchomieniu finalizatora.
Aby ustanowić silne odwołanie i ponownie użyć obiektu, rzutuj właściwość TargetWeakReference na typ 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 odzyskała silne odwołanie do niego.
Wskazówki dotyczące używania słabych odwołań
Używaj długich słabych odwołań tylko wtedy, gdy jest to konieczne, ponieważ stan obiektu może być nieprzewidywalny po zakończeniu finalizacji.
Unikaj używania słabych odwołań do małych obiektów, ponieważ sam wskaźnik może być tak duży lub większy.
Unikaj używania słabych odwołań jako automatycznego rozwiązania problemów z zarządzaniem pamięcią. Zamiast tego opracuj skuteczną politykę buforowania do obsługi obiektów aplikacji.