InsERT GT => Dodatki - zestawienia - sfera => Wątek zaczęty przez: jczapla w Lipiec 11, 2019, 12:07:22
-
Hejka
Napisałem prosty kod, który generuje RW i PW. Chyba dość typowy. Uruchamiany jest w WebAPI na IIS. Do mojego WebAPI wysyłana jest cała struktura danych w jednym żądaniu.
Wersja 1.50 HF2.
SuDokument rwdoc = CreateNewRW(data, magCode);
foreach (var pr in data.Products)
{
AddProductToRW(rwdoc, pr);
}
rwdoc.Zapisz(); ;
res.RWId = rwdoc.Identyfikator;
res.RWNr = rwdoc.NumerPelny;
rwdoc.Zamknij();
SuDokument pwdoc = CreateNewPW(data, magCode);
foreach (var pr in data.Products)
{
AddPRoductToPW(pwdoc, pr);
}
pwdoc.Zapisz();
res.PWId = pwdoc.Identyfikator;
res.PWNr = pwdoc.NumerPelny;
pwdoc.Zamknij();
W metodach AddProductToRW(...) jest coś takiego
foreach (var s in pr.Surowce) {
TowarInfoDTO ct = towarService.GetTowarInfo(s.Symbol, db); // tu jest pobranie ID produktu
if (ct != null)
{
SuPozycja p = rwdoc.Pozycje.Dodaj(ct.Id);
p.IloscJm = s.Ilosc;
}
else {
throw new Exception($"Blad dodania towaru {s.Symbol} do dokumentu RW");
}
}
I wszystko działa tylko dość wolno. Dla 60 pozycji w RW i 20 pozycji w PW wykonuje się ponad 30 s. Uruchomione na serwerze na którym jest DB i web API.
Nie za dużo? Co może być przyczyną?
-
SuDokument AutoPrzeliczanie może pomóc?
-
Nie za dużo?
Dożo dla GT to tysiące pozycji, przy takich ilościach z przeliczaniem pozycji nie powinno być dużej różnicy, ale można spróbować.
Co może być przyczyną?
To co najczęściej - podejrzewam problemy wydajnościowe.
-
Dzięki za odpowiedź.
Wydajnościowych problemów to bym się nie spodziewał bo to dość mała baza (1,2 GB) i kilku użytkowników, którzy większość czasu w pracy patrzą w smartfony. Chociaż... Właśnie sprawdziłem i serwer ma 8GB RAMu :) #jprdl.
Dużo to miałem na myśli czas a nie ilość pozycji.
Sprawdziłem z wyłączeniem Autoprzeliczania i zeszło do ok 15s. Ale nie mogę zastosować bo w moim przypadku ja korzystam z kolejno przeliczonych wartości dokumentu po dodaniu kolejnych pozycji do RW.
I teraz zupełnie inny problem :)
Przekazuje do API taką strukturę
class Produkt{ //gotowy (dla PW)
Lista<Surowiec> Surowce (dla RW)
}
I dodając kolejne pozycje do RW wyliczam koszt surowców dla produktu, dodanie surowców dla jednego Produktu określa mi koszt RW dla tego produktu. Jak wyłączę to przeliczenie to w trakcie dodawania do RW wartość RW = 0. Wcześniej próbowałem odpytywać ceny z procedury spSub_CenyPoziom_12 ale w testowych danych zwracała dziwne wartości jeśli towar (surowiec) nie miał dostawy z ceną. Jeszcze sprawdzę.
Jaki jest optymalny sposób dodawania pozycji do RW aby można było określić wartość RW po np. każdych 10 pozycjach?
-
Wydajnościowych problemów to bym się nie spodziewał bo to dość mała baza (1,2 GB) i kilku użytkowników, którzy większość czasu w pracy patrzą w smartfony.
Najwyraźniej nie wiesz czym są problemy wydajnościowe, poczytaj moje wypowiedzi na forum, od lat powtarzam, że problemy nie są ściśle powiązane z rozmiarem bazy danych/ilością danych, gdzie w tym przypadku jeśli rozmiar wynika z dokumentów to jest to już bardzo prawdopodobne.
Chociaż... Właśnie sprawdziłem i serwer ma 8GB RAMu :) #jprdl.
Nie rozumiem zdziwienia - jeśli SQL jest w wersji <= 2008 R2 to pamięci jest z zapasem, jeśli w wyższej to może trochę brakować, ale nie musi...
I teraz zupełnie inny problem :)
Przekazuje do API taką strukturę
class Produkt{ //gotowy (dla PW)
Lista<Surowiec> Surowce (dla RW)
}
I dodając kolejne pozycje do RW wyliczam koszt surowców dla produktu, dodanie surowców dla jednego Produktu określa mi koszt RW dla tego produktu. Jak wyłączę to przeliczenie to w trakcie dodawania do RW wartość RW = 0. Wcześniej próbowałem odpytywać ceny z procedury spSub_CenyPoziom_12 ale w testowych danych zwracała dziwne wartości jeśli towar (surowiec) nie miał dostawy z ceną. Jeszcze sprawdzę.
Jaki jest optymalny sposób dodawania pozycji do RW aby można było określić wartość RW po np. każdych 10 pozycjach?
Wygląda na to, że nie znasz podstaw działania programu, a bez tego ciężko/nie da się tworzyć rozwiązań dodatkowych - w momencie edycji dokumentu (jeśli nie dysponujesz dostaw, automatycznie lub ręcznie) to nie poznasz rzeczywistych kosztów wydawanych towarów, znane są dopiero po wydaniu towaru z magazynu, czyli po zapisie dokumentu, najprościej więc będzie po prostu odczytać te dane po zapisie dokumentu...
-
Dzięki, spróbuję określać wartości produktów po zapisaniu dokumentu RW.
-
Dzięki, spróbuję określać wartości produktów po zapisaniu dokumentu RW.
To teraz próbujesz.
Po zapisaniu je po prostu odczytasz ;)