Darek FremanOfArrakis 0 Napisano 15 Maja 2023 Udostępnij Napisano 15 Maja 2023 w [SFERA] Potencjalny memory leak przy zapisie/kompletacji ZK i dod poz. do FS (edytowane) Witam! We własnym projekcie lub waszym konsolowym przy zapisie/kompletacji ZK lub dodawaniu do istniejącej FS pozycji mam następujace "zjawisko" (kompletacja 66 pozyzji): Łaczenie ze sferą raz przy uruchomieniu aplikacji, po zapisie nie zwalnia pamięci - przyrost 10-20MB per/pozycja. Kasowałem QueryCache, sprawdzałem z multi i single instance i siłowałem z GC zawze ten sam efekt. Metoda: public Dictionary<string, object> KompletujPozycjaZK(string uid, int zkId, PozycjaZamowiona _PozycjaRealizowana) { try { var totTimer = new Stopwatch(); totTimer.Start(); IZamowieniaOdKlientow zamowienia = sfera.PodajObiektTypu<IZamowieniaOdKlientow>(); using (IZamowienieOdKlienta zk = zamowienia.Znajdz(z => z.Id == zkId)) { if (zk.Dane.DataSprzedazy == null || (DateTime.Now.Date - zk.Dane.DataSprzedazy.Value.Date).TotalDays > 0) { zk.Dane.DataSprzedazy = DateTime.Now.Date; } var pozEncja = zk.Dane.Pozycje.FirstOrDefault(p => p.Id == _PozycjaRealizowana.Id); if (pozEncja == null) return new Dictionary<string, object> { { "error", "wybrana pozycja nie istnieje w Nexo" } }; if (_PozycjaRealizowana.IloscSkompletowana > pozEncja.IloscWJednostceBazowej) { var przelicznik = pozEncja.IloscWJednostceBazowej != pozEncja.Ilosc ? pozEncja.IloscWJednostceBazowej / pozEncja.Ilosc : 1.00M; var ilosc = przelicznik != 1 ? _PozycjaRealizowana.IloscSkompletowana / przelicznik : _PozycjaRealizowana.IloscSkompletowana; var iloscPierwotna = pozEncja.Ilosc.ToString(); pozEncja.UstawIlosc(ilosc); _log.Info($"Zmiana ilości pozycji na większą niż zamówiona! ZK: {zk.Dane.NumerWewnetrzny.PelnaSygnatura}, Symbol Towaru:{pozEncja.AsortymentAktualny.Symbol}, Ilość pierwotna:{iloscPierwotna}, Nowa Ilość: {pozEncja.Ilosc}, UID: {uid}"); } var jm = pozEncja.AsortymentAktualny.PodstawowaJednostkaMiaryAsortymentu; IDokumentRezerwujacy dokRezerwujacy = (IDokumentRezerwujacy)zk; if (pozEncja.Rezerwacja != null && pozEncja.Rezerwacja.Ilosc > 0) { _log.Info($"Towar: {pozEncja?.AsortymentAktualny?.Nazwa} - ILOSC ZWALNIANA: {pozEncja.Rezerwacja.Ilosc} JMpodst: {pozEncja.AsortymentAktualny.PodstawowaJednostkaMiaryAsortymentu.Symbol()} JmMag: {pozEncja.JednostkaMagazynowa().Symbol()}"); dokRezerwujacy.ZwolnijRezerwacje(pozEncja, pozEncja.Rezerwacja.Ilosc, jm); } if (_PozycjaRealizowana.IloscSkompletowana > 0) dokRezerwujacy.ZwiekszRezerwacje(pozEncja, _PozycjaRealizowana.IloscSkompletowana, jm); pozEncja.GotowaDoRealizacji = true; string sygnatura = zk.Dane.NumerWewnetrzny?.PelnaSygnatura ?? ""; string nazwaTw = pozEncja?.AsortymentAktualny?.Nazwa ?? ""; if (!zk.Zapisz()) { _log.Info($"KompletujPozycjaZK - Błąd kompletacji pozycji: {sygnatura} Towar: {pozEncja?.AsortymentAktualny?.Nazwa}"); var bledy = sfera.PodajBledy(zk); return new Dictionary<string, object> { { "error", $"Błąd kompletacji pozycji: {sygnatura}" } }; } totTimer.Stop(); var el = totTimer.Elapsed; _log.Info($"KompletujPozycjaZK: {sygnatura} Towar: {nazwaTw} IloscSkompletowana: {_PozycjaRealizowana.IloscSkompletowana} Elapsed: {String.Format("{0:00}:{1:00}.{2:00}", el.Minutes, el.Seconds, el.Milliseconds / 10)}"); Debug.WriteLine($"Elapsed method TOTAL time: {String.Format("{0:00}:{1:00}.{2:00}", el.Minutes, el.Seconds, el.Milliseconds / 10)}"); } } catch (Exception ex) { _log.Error(ex.Message); return new Dictionary<string, object> { { "error", "Błąd kompletacji pozycji: " + ex.Message } }; } //GC.Collect(); //GC.WaitForPendingFinalizers(); //GC.Collect(); return new Dictionary<string, object> { { "success", "Ok" } }; } Dodam że do wersji <=40 wszystko smigało... Subiekt NEXO PRO 45 Sfera zdarzeniowa - brak SQL Server 2016 Standard 64G RAM Edytowane 15 Maja 2023 przez Darek FremanOfArrakis Link to postu
Wojciech Szopiński 227 Napisano 16 Maja 2023 Udostępnij Napisano 16 Maja 2023 w [SFERA] Potencjalny memory leak przy zapisie/kompletacji ZK i dod poz. do FS Proszę w pierwszej kolejności wyeksportować dane diagnostyczne (w programie proszę nacisnąć Ctrl+Shift+H) i podesłać nam do analizy (może być w wiadomości prywatnej. Można również utworzyć plik zrzutu w menedżerze zadań windows i również podesłać nam do analizy. Czy Pana aplikacja edytuje zamówienie w osobnym wątku? Link to postu
Polecane posty