Yazılımın belleğinin tükenmesini dotMemory JetBrains aracılığıyla izliyorum.Varlık Çerçevesi Bellek Sızıntısı
Depomda bir sorgu yaptığımda, pencereyi kapatırsam, aramayı yaptığım nesneyi bıraktığımı fark ettim; Depomu hafızamda kullandım ve hatta içeriğimi bertaraf ettim ama hafızada hiçbir şey kalmadı. Neleri kontrol edebilirim? İşte
kusurlu kodudur:if (creazioneDocumento == null || creazioneDocumento.Count == 0) return;
nesne hatırladı ama en kısa sürede değildir: hata ayıklama yapmak
LoginViewModel.cs
using (DbContext = new Context())
{
var creazioneDocumentoRepository = new RepositoryBase<CreazioneDocumento>(ctx);
var creazioneDocumento = creazioneDocumentoRepository.Lista();
if (creazioneDocumento == null || creazioneDocumento.Count == 0)
return;
var decimaliQuantita = creazioneDocumento.Max(x => x.NumeroDecimaliQuantita);
_NumeroDecimaliQuantita = decimaliQuantita != 0 && decimaliQuantita > 0 ? decimaliQuantita : 0;
var decimaliPrezzo = creazioneDocumento.Max(x => x.NumeroDecimaliPrezzo);
_NumeroDecimaliPrezzo = decimaliPrezzo != 0 && decimaliPrezzo > 0 ? decimaliPrezzo : 3;
_NumeroDecimaliImponibile = 2;
// ctx.Dispose();
}
, ben kadar fark Nesneyi bellekte kaldığı "max" ı çalıştırıyorum. Referans ve bellekte benim loginviewmodel tutmak metodlar
yerine bu ekran görüntüsü söylüyor ve onlar iki max olduğuna inanıyoruz: Burada
dotmemory gelen bir ekran görüntüsü
Sen çöp toplamayla ortamında bir bellek sızıntısı kanıtlanmış DEĞİL olduğunu biliyoruz? Tek yaptığınız, toplanan çöp toplanmamış nesnelerin, bellekten YET olmadıklarıdır. İkinci ölçümü almadan önce GC'nin çalışmasının kanıtını kaçırırsınız. Kapatmak için oylama - yeniden yüklenemez. – TomTom
@TomTom dotMemory anlık görüntü aldığında, tam bir çöp toplama işlemi yapar, dolayısıyla bellekte nesneler varsa bazı kökler tarafından tutulduğu anlamına gelir. Brux88: LoginViewModel'in kendisinin bir örneğini görmüyorum, ancak bazı lambdaların kapanmasıyla birlikte başka bazı delegeler tarafından bellekte tutuluyor. LoginViewModel sınıfı kaynak koduyla daha fazlasını söylemek imkansız. –
Aslında, düşündüğüm gibi. ama hafızayı nasıl kaldıracağımı anlamıyorum. Bu satırı çalıştırdığımda sorun: var decimaliQuantita = creazioneDocumento.Max (x => x.NumeroDecimaliQuantita); ..... nasıl tamir edebilirim? – Brux88