Łukasz Czarnowski 17 Napisano 24 Września 2020 Udostępnij Napisano 24 Września 2020 w [sfera] Listing asortymentu - optymalizacja Poproszę o podpowiedź jak, w ramach Sfery, zoptymalizować poniższy kod pod kątem czasu wykonania - iteracji po pozycjach asortymentu. using (var sfera = UruchomSfere()) { IAsortymenty menedzerAsortymentow = sfera.PodajObiektTypu<IAsortymenty>(); IEnumerable<Asortyment> wszystkie = menedzerAsortymentow.Dane.Wszystkie(); foreach (var towar in wszystkie) { PozycjaCennika poz = towar.PozycjeCennika.Where(a => a.Cennik.PoziomCen.Nazwa == "Detaliczny").FirstOrDefault(); cena = Decimal.ToInt32(poz.CenaBrutto * 100); foreach (KodKreskowy kod in towar.PodstawowaJednostkaMiaryAsortymentu.KodyKreskowe) { linia = towar.Nazwa + " " + kod.Kod + " " + cena; Console.WriteLine(linia); } } } Link to postu
Paweł Kubacki 203 Napisano 24 Września 2020 Udostępnij Napisano 24 Września 2020 w [sfera] Listing asortymentu - optymalizacja Najprostszym rozwiązaniem jest przekazanie dodatkowych parametrów do metody Wszystkie, które pozwolą załadować wszystkie dane jednym zapytaniem. Wówczas podczas iteracji dane nie będą musiały być doładowywane. IEnumerable<Asortyment> wszystkie = menedzerAsortymentow.Dane.Wszystkie("PozycjeCennika.Cennik.PoziomCen", "PodstawowaJednostkaMiaryAsortymentu.KodyKreskowe"); Jednak można to zoptymalizować jeszcze bardziej. Proszę zauważyć, że z wszystkich danych asortymentu potrzebna jest jedynie nazwa. Można więc stworzyć zapytanie, które wczyta jedynie te dane, które są konieczne. using (var sfera = UruchomSfere()) { IAsortymenty menedzerAsortymentow = sfera.PodajObiektTypu<IAsortymenty>(); var wszystkie = menedzerAsortymentow.Dane.Wszystkie().Select(x => new { x.Nazwa, Cena = x.PozycjeCennika.Where(a => a.Cennik.PoziomCen.Nazwa == "Detaliczny").Select(pc => pc.CenaBrutto).FirstOrDefault(), Kody = x.PodstawowaJednostkaMiaryAsortymentu.KodyKreskowe.Select(k => k.Kod), }); foreach (var towar in wszystkie) { var cena = Decimal.ToInt32(towar.Cena * 100); foreach (var kod in towar.Kody) { var linia = towar.Nazwa + " " + kod + " " + cena; Console.WriteLine(linia); } } } 1 Link to postu
Łukasz Czarnowski 17 Napisano 24 Września 2020 Autor Udostępnij Napisano 24 Września 2020 w [sfera] Listing asortymentu - optymalizacja Dziękuję, własnie tego szukałem. Link to postu
Polecane posty