5

Projemizde Network Geri Aramaları nedeniyle bellek sızıntıları tespit ettik. Ağ talebi bir parçadan kovulur ve yanıt parçanın geri aranmasıyla geri gelir. Sorun, kullanıcı parçayı terk ettiğinde, geri dönüşten sonra toplanan çöpün kendisine bağlı olmamasıdır. Dolayısıyla bir bellek sızıntısı var.Ağ geri bildirimi için zayıf Referans kötü bir fikir mi?

Benim önerdiğim çözüm, geri arama referansını parça üzerindeki durdurucunun üzerinde kaldırmaktı. Bu şekilde, GC ilgilenebilir.

Çalıştığım işçinin önerdiği başka bir çözüm de, geri aramalara WeakReference kullanmaktır. Bununla ilgili sorun, geri çağırmanın, geri aramalardan yanıt alamamış olmamız için sık sık toplanan çöpleri almasıdır (kullanıcının bir yanıt beklediğinde bazı zamanlar). Sorun Zayıf Referans her zaman GC kullanılarak toplanan çöp olabilir.

Bu senaryoda WeakReference kullanmak iyi bir fikir değildir.

Siz ne düşünüyorsunuz?

cevap

2

Sanırım dış sınıf için zayıf referansı kullanın ama geri aramada bulunmayın. Geri arama, gerçekten sızıntı değil, dış sınıf. Yani, kullandığınız geri arama, toplanmanın ancak geri çağırmanın alındığı değil.

Cevap beni Sorularınız :) varsa

1

Sana dinleyici çok kolay o zaman asla denir geri arama neden GC olmuş olabilir callback çünkü geri arama dinleyici için WeakReference, iyi bir model olmadığını düşünüyorum. Ancak @MacFang It's not the callback really leak but the outer class cevabını kabul ediyorum.

0

Her iki yanıtı da kabul edin. Cevap vermek için zaman ayırdığınız için teşekkür ederim. Çözelti, zayıf parçanın "fragmanını" geri göndermeye değil, geri arama işlemine değil, ağ işlemi tamamlandığında parçanın hala canlı olup olmadığını kontrol etmekti. GC, etrafta olmadığı zaman parçayı toplar.