miałem na myśli an article, który koncentruje się na przyspieszaniu LINQ do zapytań SQL. Jedną z wymienionych technik jest "Użyj skompilowanych zapytań" i wyjaśnij, jak z niego korzystać.Kiedy kompilacja zapytań LINQ do SQL poprawia wydajność
Chciałem zobaczyć poprawę wydajności kompilowanych zapytań, a więc próbowałem tego samego przykładu dostarczonego przez autora. Użyłem Northwind Db jako datacontext. Próbowałem normalnego wykonania i wykonania instrukcji compiledquery i sprawdziłem je na LINQ PAD.
Najpierw próbowałem wykonać zapytanie bez używając CompileQuery. Zajęło 2.065 sekund.
var oo = from o in Orders
where o.OrderDetails.Any (p => p.UnitPrice > 100)
select o;
oo.Dump ("Order items with unit price more than $100");
var oo1 = from o in Orders
where o.OrderDetails.Any (p => p.UnitPrice > 10)
select o;
oo1.Dump ("Order items with unit price more than $10");
drugie zapytania z użyciem CompileQuery. Zajęło 2.100 sekund.
var oo = CompiledQuery.Compile ((TypedDataContext dc, decimal unitPrice) =>
from o in Orders
where o.OrderDetails.Any (p => p.UnitPrice > unitPrice)
select o
);
oo (this, 100).Dump ("Order items with unit price more than $100");
oo (this, 10).Dump ("Order items with unit price more than $10");
Ponowne ich wykonanie kilka razy wykazało, że czas potrzebny na oba podejścia jest prawie podobny.
Tutaj widzimy tylko dwa wykonania zapytań dla każdej metody. Próbowałem wykonać 10 zapytań dla każdego z nich. Ale obaj skończyli około 7 sekund.
Czy wstępne kompilowanie zapytań naprawdę poprawia wydajność? Czy źle rozumiem warunki użytkowania?
Dziękuję za poświęcony czas i uwagę.
Edit: Po przeczytaniu zaakceptowane odpowiedź, czytelnicy mogą także chcą przejść przez this article który ładnie wyjaśnia jak skompilowane zapytania poprawić wydajność.
Oznacza to, że w przypadku dużych zapytań możemy wyeliminować wykonanie instrukcji time foreach, a następnie pomyśleć tylko o poprawieniu drugiego kroku (wykonanie i odzyskanie wyników). – Marshal
@Marshal: Tak, to jest idea. – StriplingWarrior
Dziękuję bardzo James. To było naprawdę pomocne. Przy okazji, lubię też czytać twoje blogi;) – Marshal