Отличный вебкаст Романа Здебского "Технический обзор LINQ".
Доклад с конференции «Платформа – 2009». В докладе раскрывается принципиально новый подход к построению запросов и трансформации данных (объекты, реляционные структуры, XML) в .NET-языках программирования. Основной темой обсуждения служит использование преимуществ работы с проекциями данных в стиле реляционных движков в полностью типизированном окружении с контролем ошибок на этапе компиляции кода.
Вебкаст "Технический обзор LINQ"
Ускоряем Linq2Sql: Compiled Query & ObjectTrackingEnabled
Когда код компилируется - это хорошо. Когда код работает так , как было задумано, - это еще лучше. Ну, а когда код, к тому же, работает быстро - это вобще здорово. Есть масса способов увеличения скорости работы кода, в этом посте я хочу рассказать о возможности увеличения скорости выполнения запросов Linq2Sql.
Если в приложении есть повторяющиеся запросы или запросы, похожие по структуре, но отличающиеся параметром, можно существенно увеличить производительность, если выделить общий запрос, скомпилировать его один раз в лямбда-выражение и затем выполнять уже скомпилированный запрос раз с различными параметрами.
Для этих целей .NET 3.5 и выше есть класс CompiledQuery. Работа с этим классом не представляет ничего сложного. Для примера возьму кусок кода из своего проекта. Смысл в том, что нужно выбирать из БД список форм, соответствующих проекту, заданному через ID. Для этого у меня создан такой скомпилированный запрос:
private static Func<MyDataContext, int, IEnumerable<Forms>>fGetFormsByProjectID =
CompiledQuery.Compile<MyDataContext, int, IEnumerable<Forms>>
((MyDataContext context, int projectID) => context.Forms.
Where<Forms>(form => form.ProjectID == projectID));
А в вызывается он следующим образом:
IEnumerable<forms> forms = fGetFormsByProjectID(new MyDataContext(ConnectionPool.Connection), projectID);
Кроме использования скомпилированных запросов для увеличения скорости выполнения запросов к БД можно использовать получение данных в режиме "Только чтение". Для этого перед выполнением запроса установите свойство ObjectTrackingEnabled вашего DataContext-экземпляра в false:
using(MyDataContext context = new MyDataContext(ConnectionPool.Connection))
{
context.ObjectTrackingEnabled = false;
var query = from form in context.Forms where form.StatusID == Status.Completed select form;
}
При использовании данного метода следует помнить, что вызов метода SubmitChanges() в режиме получения данных только для чтения вызовет исключение.
На тему производительности Linq2Sql Rico Mariotty провел серию тестов, результаты которых опубликовал в пяти статьях:
DLinq (Linq to SQL) Performance (Part 1)
DLinq (Linq to SQL) Performance (Part 2)
DLinq (Linq to SQL) Performance (Part 3)
DLinq (Linq to SQL) Performance (Part 4)
DLinq (Linq to SQL) Performance (Part 5)
Еще статьи по теме:
http://msdn.microsoft.com/ru-ru/magazine/ee336024.aspx
Ярлыки
Копирайты
Блог о жизни вне кода
Постоянные читатели
Популярно
-
Продолжаю серию постов о своём первом андроид-приложении. Сегодня мысли о публикации приложения в разных маркетах.
-
Два месяца прошло с момента публикации моего первого Android приложения на Play market, я перебралась на Самуи , а гугл по-тихоньку начал...
-
Продолжаю серию заметок о разработке первого android-приложения. На этот раз речь о выборе стратегии монетизации приложения.
-
Нарезка самых сочных моментов из выступления Александра Соловьёва на JavaScript Frameworks Day 2013. Доклад был про ClojureScript, полная ...
-
Продолжаю тему полевых заметок, начатую в предыдущем посте . В этот раз немного об инструментах и чуть-чуть о социальщине.
-
После установки MS SQL Server CE мы получаем целый набор dll-файлов. Для чего нужна какая dll? Что нужно добавлять в проект, а что нет? Сейч...
-
Понравился анекдот о колбасе и яйцах :) Жена посылает мужа-программиста в магазин: - Дорогой, купи, пожалуйста, палку колбасы, и если б...
-
Отличный вебкаст Романа Здебского "Технический обзор LINQ". Доклад с конференции «Платформа – 2009». В докладе раскрывается принци...
-
Небольшая сравнительная характеристика двух embedded-бд. + SQLite мальнкий размер БД (пустая база весит несколько килобайт против нескольких...