Skocz do zawartości

Darek FremanOfArrakis

Użytkownik
  • Liczba zawartości

    3
  • Rejestracja

  • Ostatnia wizyta

Ostatnie wizyty

Blok z ostatnimi odwiedzającymi dany profil jest wyłączony i nie jest wyświetlany użytkownikom.

Darek FremanOfArrakis's Achievements

0

Reputacja

  1. 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
  2. Generalnie chodzi mi o czas ogólny procedury rezerwacji pozycji dokumentu ze statusem C, na który w tym wypadku składa się: Dla ZK z 200 poz. : Zamowienie znajdz time: 00:01.57 PozycjaEncja znajdz time: 00:00.00 ZwiekszZwolnijRezerwacje time: 00:00.06 Zapisz ZK time: 00:02.43 Elapsed method TOTAL time: 00:00:04.08 Suma czasu wykonania SQL queries wygenerowanych przez Linq to znikome kilka milisekund Dla ZK z 10 poz. : Zamowienie znajdz time: 00:00.30 PozycjaEncja znajdz time: 00:00.00 ZwiekszZwolnijRezerwacje time: 00:00.06 Zapisz ZK time: 00:00.11 Elapsed method TOTAL time: 00:00:00.48 Suma czasu wykonania SQL queries wygenerowanych przez Linq to znikome kilka milisekund Logiczne jest to, że większe zamówienie szczególnie przy zapisie będzie wydłużało czas proporcjonalnie do ilości dodawanych pozycji, od wersji >=41 czas zapisu i wyszukiwania wzrósł 4 krotnie. Czy nie ma możliwości skompletowania dokumentu już ze zmienionym statusem przez jakiś "Inny" Manager? Tj. bez otwierania dokumentu? Według mnie nie przewidziano scenariusza, który by umożliwił sprawną kompletację częściową pozycji – z UI nie jest to możliwe a przez SFERĘ działa to mozolnie przez znane opóźnienia obecnej procedury. Dodatkowa metoda zk.KompletujZamowienie domyślnie zawsze rezerwuje pełną dostępną ilość – jeśli mam popularny produkt na kilkudziesięciu ZK, np. spóźnioną dostawę(dla nas) i stan 50% i termin dostawy „na już” to zwykle wydajemy to co mamy skompletowane po równo dla każdego ZK i dosyłamy resztę po nowej dostawie. Kolejność realizacji zamówień - brak Sfera zdarzeniowa - brak SQL Server 2016 Standard 64G RAM testowane na DB o zapełnieniu 20GB i 50GB (podobne rezultaty) Pozdrawiam.
  3. Od kilku lat bezproblemowo korzystamy z rozwiązania własnego obsługującego dokumenty Nexo na kolektorach danych przez Sferę. Od momentu przejścia API na .net Framework 4.7.2 powstało kilka problemów z wydajnością – z większością się uporaliśmy niestety z kompletacją pojedynczej pozycji ZK już nie. Do tej pory (do wersji 41) używanie interfejsu IDokumentRezerwujący -> Zwolnij/ZwiększRezerwację na ZK działało satysfakcjonująco (pomimo potrzeby otwarcia/zmiany/zapisu całego dokumentu). Obecnie kompletacja poj. pozycji w tej formie jest nie do przyjęcia – trwa ok 4 sek. (na ZK powyżej 100 pozycji) vs 1s. Czy ominęliśmy coś w dokumentacji i jest inny bardziej wydajny sposób (np. ew. osobny „Menadżer Rezerwacji”)?
×
×
  • Dodaj nową pozycję...