.Net Core3.1 MVC, Entity Framework, wielowątkowość w kontrolerze

0

Tak metody Get.... korzystają z DbContext

public int GetTheNumberOfFour(Tuple<byte, byte, byte, byte>[] four)
        {
            ...
            int allFour = 0;

            foreach (var f in four)
            {
                allFour = _context.Model4
                    .Where(x =>
                        x.N1 == f.Item1 &&
                        x.N2 == f.Item2 &&
                        x.N3 == f.Item3 &&
                        x.N4 == f.Item4)
                    .Select(x => x.Amount)
                    .FirstOrDefault();

                allFour += allFour;
            }
            ...
            return allFour;
        }
0
UglyMan napisał(a):

Nie wiem co za wyliczenia robisz na tych rekordach ale chyba lepiej to zrobić na bazie.

Czy procedury składowane będą wykonywane wielowątkowo?

2

Jak na moje oko, to tutaj bottleneckiem (tak jak napisałem wcześniej próbując zgadnąć) jest: N+1 query

Nie możesz wszystkich potrzebnych danych pobrać przed wejściem do tego ParallelFora?? i nie wywoływać w nim w pętli tych SQLi??

Spróbuj zrobić tak, aby te funkcje GetTheNumberOfBlabla otrzymały już gotowe dane, tak aby nie wykonywały żadnego zapytania do bazy lub aby nawet nie miały usinga do EF Core, uczyń je pure.

Śmiem twierdzić, że pozbycie się N+1 query zredukuje czas wykonywania tego o (strzelam se) 80%

1
piotrOlczyk napisał(a):
UglyMan napisał(a):

Nie wiem co za wyliczenia robisz na tych rekordach ale chyba lepiej to zrobić na bazie.

Czy procedury składowane będą wykonywane wielowątkowo?

Wszystko zależy co i jak liczysz i jak to zrobisz. Nie wiem, jaka to baza, ale są na to sposoby, żeby były wielowątkowe. Nie wiem jak potem ładujesz dane do bazy, ale ładowanie kilku milionów w jednej transakcji spowoduje urośniecie loga i tabeli tymczasowych do monstrualnych rozmiarów co też może mieć negatywny wpływ na wydajność. Wisz w ogóle gdzie masz wąskie gardło? Może się okazać, że jest to odczyt i zapis danych. Jak jest to operacja typowo na danych z bazy to powinna być tam zrobiona jak nie potrzebuje komunikować się ze Światem zewnętrznym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0