Когда код компилируется - это хорошо. Когда код работает так , как было задумано, - это еще лучше. Ну, а когда код, к тому же, работает быстро - это вобще здорово. Есть масса способов увеличения скорости работы кода, в этом посте я хочу рассказать о возможности увеличения скорости выполнения запросов 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
Ускоряем Linq2Sql: Compiled Query & ObjectTrackingEnabled
Подписаться на:
Комментарии к сообщению (Atom)
Ярлыки
.net
(17)
.net framework
(4)
256
(1)
армагедон
(1)
Библиотека
(12)
видео
(1)
вконтакте
(1)
декомпилятор
(1)
задачки
(5)
итоги
(1)
кодировка
(1)
космос
(1)
маркет
(1)
монетизация
(2)
мысли в слух
(10)
обфускация
(1)
Оптимизация сайта
(1)
отдых
(3)
Ошибка 720
(1)
переводы
(5)
подкасты для разработчика
(3)
прибыль
(1)
приложение
(2)
Разное
(28)
разработка ПО
(31)
рефакторинг
(5)
скачивания
(1)
ссылки
(2)
статистика
(1)
юмор
(31)
Access
(1)
admin2012.ru
(1)
admob
(1)
AMD
(1)
android
(6)
android conventions
(1)
android studio
(1)
angular.js
(1)
ant
(1)
antipattern
(1)
atdd
(2)
autocomplete
(1)
backbone.js
(1)
background repeat
(1)
batch file
(1)
batman.js
(1)
bdd
(3)
bootstrap
(1)
bug
(1)
build
(1)
C#
(31)
clojurescript
(1)
codeigniter
(1)
coding style
(1)
coffeescript
(3)
components
(1)
css
(1)
Custom splash screen
(1)
DDD
(1)
DI
(1)
eclipse
(1)
facebook
(1)
gradle
(1)
hot keys
(1)
html
(4)
ide
(1)
IE
(4)
IE8
(2)
IoC
(6)
ion auth
(1)
jasmine
(1)
java
(3)
javas
(1)
javascript
(9)
jquery
(4)
jquery ui
(1)
justify
(1)
knockout.js
(2)
linq
(3)
localDB
(1)
massive
(1)
micro orm
(1)
mocha
(1)
mock
(1)
mono
(1)
monodroid
(1)
moq
(2)
mpress
(1)
ms sql ce
(8)
msswit2013
(2)
mvc framework
(1)
mysql
(2)
NetBeans
(1)
nodejs
(1)
nosql
(1)
npm
(1)
object db
(1)
opera apps
(1)
ORM
(2)
phonegap
(1)
php
(12)
phpunit
(3)
play market
(2)
qunit
(1)
RegExpr
(2)
require.js
(1)
samsung apps
(2)
screenshoot
(1)
sdk
(1)
Shortcut
(1)
Silverlight
(4)
singleton
(1)
slide me
(1)
soap
(2)
social network
(1)
spellcheck
(1)
SpicIE
(1)
sql
(3)
sqlite
(4)
style
(1)
SublimeText 2
(5)
Super Mario
(1)
svn
(1)
tdd
(14)
tddigest
(5)
testing
(7)
text align
(1)
Tools
(18)
torrents.ru
(1)
tortoisesvn
(1)
twitter
(1)
uml
(1)
unit testing
(5)
unity
(3)
usability
(2)
virus
(1)
visual studio
(7)
web services
(2)
Windows 7
(1)
xunit
(3)
ZenCoding
(2)
Копирайты
Авторские права на публикуемые материалы (кроме тех материалов, где явно указан источник) принадлежат автору блога (мне) и могут быть использованы где-либо еще только с моего согласия.
Блог о жизни вне кода
Постоянные читатели
Популярно
-
Понравился анекдот о колбасе и яйцах :) Жена посылает мужа-программиста в магазин: - Дорогой, купи, пожалуйста, палку колбасы, и если б...
-
Продолжаю серию постов о своём первом андроид-приложении. Сегодня мысли о публикации приложения в разных маркетах.
-
Бета-версия одиннадцатой cтудии вызвала много охов и ахов. Чтобы там ни говорили, работать в ней приятно, хоть по началу немного необычно. ...
-
Перевод поста "Top 10 Things That Annoy Programmers" Кевина Панга. Оригинал тут
-
Jquery.Inputmask - крутой (да-да, именно) плагин, добавляющий гибкости в работу с обычным текстовым полем для ввода. Плагин является ус...
-
Разделяй и влавствуй - подход на все времена. Концепция модульного программирования не нова, и хорошо себя зарекомендовала. В мире разрабо...
-
Фридман А.Л. - Основы объектно-ориентированной разработки программных систем. ( скачать ) Книга написана как учебное пособие для студентов ...
-
Steve Freeman, Nat Pryce. Growing Object-Oriented Software, Guided by Tests ( скачать ) Test-Driven Development (TDD) is now an established...
-
Для некоторых методов класса Microsoft Code Analysis даёт такой совет: CA1822 : Microsoft.Performance : The 'this' parameter (or ...
0 коммент.:
Отправить комментарий