Я имел в виду статью, в которой основное внимание уделяется ускорению LINQ to SQL Queries. Один из методов, который он упоминает, - "Использовать скомпилированные запросы" и объясняет, как его использовать.
Я хотел видеть улучшение производительности скомпилированных запросов, и поэтому я попробовал тот же пример, предоставленный автором. Я использовал Northwind Db как datacontext. Я попробовал выполнить обычное выполнение и выполнил компиляцию и проверил их на 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 секунд.
Действительно ли предварительная компиляция запросов повышает производительность? Или я неправильно понимаю, что это условия использования?
Спасибо за ваше время и внимание.
Edit: После прочтения принятого ответа читатели могут также захотеть пройти в этой статье, в котором приятно объясняется, как скомпилированные запросы повышают производительность.