LinqToSql Преимущества прекомпиляции запросов? - PullRequest
5 голосов
/ 06 октября 2010

Я просматривал примеры запросов LINQ, поставляемых с LINQPad, взятых из C # 4.0 в книге Nutshell, и наткнулся на то, что я никогда не использовал в LINQ to SQL ... Скомпилированные запросы.точный пример:

// LINQ to SQL lets you precompile queries so that you pay the cost of translating
// the query from LINQ into SQL only once. In LINQPad the typed DataContext is
// called TypeDataContext, so we proceed as follows:

var cc = CompiledQuery.Compile ((TypedDataContext dc, decimal minPrice) =>    
    from c in Customers
    where c.Purchases.Any (p => p.Price > minPrice)
    select c
);

cc (this, 100).Dump ("Customers who spend more than $100");
cc (this, 1000).Dump ("Customers who spend more than $1000");

Что на самом деле покупает мне предварительная компиляция запроса LINQ to SQL?Получу ли я повышение производительности от запроса, немного более сложного, чем этот?Это даже используется в реальной практике?

Ответы [ 4 ]

8 голосов
/ 06 октября 2010

В двух словах, предварительно скомпилированные запросы дают вам выигрыш в производительности, когда вам нужно выполнить один запрос несколько раз .

Вот некоторая информация о производительности LINQ To SQL.

Я читал в нескольких местах, что компиляция вашего LINQ поможет, но я никогда не слышал, чтобы кто-то сказал, как Резкое улучшение скорости может быть. Например, в одном из моих любимых книги (LINQ в действии) от Fabrice Marguerie и другие, он цитирует страница 296 пост в блоге Rico Mariani под названием DLINQ (производительность Linq to SQL (Часть 1) как говорится с использованием скомпилированного запрос предлагает почти вдвое больше выполнение не скомпилированного запроса, и продолжает говорить, что это приносит производительность в пределах 93% от использования считыватель необработанных данных. Ну, хватит скажу, я никогда не проводил тест самостоятельно. я мог бы жить с дважды, но не 37 раз.

alt text

Итак, из этого, кажется, что вы должен всегда компилировать ваш LINQ to SQL запросы. Ну, это не совсем так. Что я рекомендую, так это то, что если вы есть причина, чтобы выполнить то же самое запрос снова и снова вы должны настоятельно рекомендуем компилировать. Если для Например, вы просто делаете LINQ для Вызов SQL один раз, никакой пользы нет потому что вы все равно должны его скомпилировать. Назовите это десять раз? Ну ты будешь решать самому.

1 голос
/ 06 октября 2010

Из этой статьи из Краткие сведения о производительности Рико Мариани

Q4:

Каковы недостатки прекомпилированных запросов?

A

Нет штрафов за прекомпиляцию (см. Тест № 13).Единственный способ потерять производительность - это если вы предварительно скомпилируете миллион запросов, а потом почти не используете их - вы бы тратили много памяти без веской причины.

Но мера:)

1 голос
/ 06 октября 2010

Мы используем это в нашей компании, и для запускаемых запросов часто нет необходимости компилировать их для каждого запуска.Вам не нужно слишком усложнять использование linq to sql, пока это не изменится, но это будет зависеть от трафика и нагрузки на серверы.

1 голос
/ 06 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...