Я имел в виду статью, посвященную ускорению запросов LINQ to SQL. В нем упоминается один из методов «Использование скомпилированных запросов» и объясняется, как его использовать.
Я хотел увидеть улучшение производительности скомпилированных запросов, поэтому я попробовал тот же пример, что и автор. Я использовал Northwind Db в качестве контекста данных. Я попробовал обычное выполнение и выполнение скомпилированного запроса и проверил их на LINQ PAD.
Сначала я попытался выполнить запрос без использования CompileQuery. Это заняло 2,065 секунды.
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");
Во-вторых, запросы с с использованием CompileQuery. Это заняло 2.100 секунд.
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");
Повторное выполнение их несколько раз показало, что время, затрачиваемое обоими подходами, почти одинаково.
Здесь мы видим только два выполнения запроса для каждого метода. Я попытался сделать 10 запросов для каждого из них. Но оба они завершили около 7 секунд.
Действительно ли предварительная компиляция запросов повышает производительность? Или я неправильно понимаю условия использования?
Спасибо за ваше время и внимание.
Редактировать: После прочтения принятого ответа читатели могут также захотеть просмотреть эту статью, в которой хорошо объясняется, как скомпилированные запросы улучшают производительность.