Zayıf Başvurular

Uygulamanın kodu bu nesneye ulaşabilirken, atık toplayıcı bir uygulama tarafından kullanılan bir nesneyi toplayamaz. Uygulamanın nesneye güçlü bir başvurusu olduğu söylenir.

Zayıf başvuru, atık toplayıcının nesneyi toplamasına izin verirken uygulamanın nesneye erişmesine izin verir. Zayıf başvuru yalnızca, güçlü başvuru olmadığında nesne toplanana kadar belirsiz süre boyunca geçerlidir. Zayıf bir başvuru kullandığınızda, uygulama yine de nesneye güçlü bir başvuru elde edebilir ve bu da nesnenin toplanmasını engeller. Ancak, her zaman güçlü bir başvuru yeniden kurulmadan önce çöp toplayıcının nesneye erişme riski vardır.

Zayıf başvurular çok fazla bellek kullanan nesneler için yararlıdır, ancak çöp toplama tarafından geri kazanıldıklarında kolayca yeniden oluşturulabilir.

Windows Forms uygulamasındaki bir ağaç görünümünün kullanıcıya karmaşık bir hiyerarşik seçenek gösterdiği varsayın. Temel alınan veriler büyükse, kullanıcı uygulamada başka bir şeye dahil olduğunda ağacı bellekte tutmak verimsizdir.

Kullanıcı uygulamanın başka bir bölümüne geçtiğinde, sınıfını WeakReference kullanarak ağaca zayıf bir başvuru oluşturabilir ve tüm güçlü başvuruları yok edebilirsiniz. Kullanıcı yeniden ağaca geçtiğinde, uygulama ağaca güçlü bir başvuru elde etmeye çalışır ve başarılı olursa ağacı yeniden oluşturmaktan kaçınıyor.

Bir nesneyle zayıf bir başvuru oluşturmak için, izlenecek nesnenin örneğini kullanarak bir WeakReference oluşturursunuz. Kod örneği için sınıf kitaplığına bakın WeakReference .

Kısa ve Uzun Zayıf Başvurular

Kısa bir zayıf başvuru veya uzun bir zayıf başvuru oluşturabilirsiniz:

  • Kısa

    Nesne çöp toplama tarafından geri kazanıldığında kısa bir zayıf başvurunun hedefi olur null . Zayıf başvuru kendisi yönetilen bir nesnedir ve diğer yönetilen nesneler gibi çöp toplamaya tabidir. Kısa bir zayıf başvuru, için WeakReferenceparametresiz oluşturucudur.

  • Uzun

    Nesnenin Finalize yöntemi çağrıldıktan sonra uzun bir zayıf başvuru korunur. Bu, nesnenin yeniden oluşturulmasını sağlar, ancak nesnenin durumu tahmin edilemez durumda kalır. Uzun bir başvuru kullanmak için oluşturucuda WeakReference belirtintrue.

    Nesnenin türünün bir Finalize yöntemi yoksa, kısa zayıf başvuru işlevi uygulanır ve zayıf başvuru yalnızca hedef toplanana kadar geçerlidir ve sonlandırıcı çalıştırıldıktan sonra her zaman gerçekleşebilir.

Güçlü bir başvuru oluşturmak ve nesnesini yeniden kullanmak için öğesinin TargetWeakReference özelliğini nesnenin türüne yayın. Target özelliği döndürürsenull, nesnesi toplanır; aksi takdirde, uygulama buna güçlü bir başvuru kazandığından nesnesini kullanmaya devam edebilirsiniz.

Zayıf Başvuruları Kullanma Yönergeleri

Uzun zayıf başvuruları yalnızca gerektiğinde kullanın çünkü nesnenin durumu sonlandırıldıktan sonra tahmin edilemez.

İşaretçinin kendisi büyük veya daha büyük olabileceğinden, küçük nesnelere zayıf başvurular kullanmaktan kaçının.

Bellek yönetimi sorunlarına otomatik çözüm olarak zayıf başvurular kullanmaktan kaçının. Bunun yerine, uygulamanızın nesnelerini işlemek için etkili bir önbelleğe alma ilkesi geliştirin.

Ayrıca bkz.