Когда компиляция запросов LINQ to SQL повышает производительность

Я имел в виду статью, посвященную ускорению запросов 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 секунд.

Действительно ли предварительная компиляция запросов повышает производительность? Или я неправильно понимаю условия использования?

Спасибо за ваше время и внимание.

Редактировать: После прочтения принятого ответа читатели могут также захотеть просмотреть эту статью, в которой хорошо объясняется, как скомпилированные запросы улучшают производительность.

12
задан Marshal 2 March 2017 в 12:50
поделиться