![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 4 Всего: 49 |
Veitmen, да вот хотя бы: http://www.mbeller.de/2007/12/performance-...tween-linq.html
|
|||
|
||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: нет Всего: 5 |
У меня была одна простенькая база. Сначала я ее работал с ADO.NET, затем на Linq. Визуально разницы в работе не видно.
Linq на первый взгляд кажется удобным инструментом. У меня есть, подозрение, что можно даже объединить в одном DataContext "живую" базу с "посторонними объектами", чего нельзя было сделать в одном DataSource (imho). Возможная потеря производительности на уровне 10% не считается критичной (иначе бы все писале на асме или С). К тому же, на уровне баз данных такая разница не суть проблема для неопытного программиста навроде меня. Я могу и больше! ![]() -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
AleXGray |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 18.1.2007 Репутация: нет Всего: 1 |
А можно сходный вопрос?
Начал колупать LINQ, наткнулся на утверждение: "Линк запросы компилируются. " Быстродействие хранимок по сравнению с обычными запросами, написанными в коде в обычном ADO.NET основано на том, что хранимки тоже предварительно компилируются. Значит ли это, что теперь скорость выполнения запроса при вызове хранимой процедуры (в том же линке) примерно равна скорости аналогичного запроса, написанного в коде с помощью линк-технологии? --------------------
В начале было Слово |
|||
|
||||
Idsa |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 5 Всего: 62 |
И да, и нет. Скомпилированный LINQ-запрос дает выгоду в том плане, что в рантайм не нужно каждый раз парсить последовательность вызовов LINQ-методов для формирования expression tree. Таким образом, конечный SQL запрос формируется быстрее. О компилированных запросах можно почитать здесь: http://linqinaction.net/blogs/jwooley/arch...ed-queries.aspx. О том, на что тратятся ресурсы при формировании Sql-запроса в Linq to Sql (иными словами - о Linq pipeline), можно посмотреть видео здесь: http://linqinaction.net/blogs/jwooley/arch...ed-queries.aspx (вообще полезная видюшка: там и помимо linq pipeline есть интересная информация). Сравнение производительности скомпилированных и нескомпилированных запросов можно найти здесь: http://blogs.msdn.com/ricom/archive/2008/0...t-solution.aspx (это 13-й пост из серии, посвященной производительности linq to sql; советую ознакомиться и с другими частями). Теперь про хранимые процедуры. Раньше хранимые процедуры имели существенное преимущество, т. к. при их создании формировался приблизительный план выполнения, а при запуске формировался и кэшировался фактический план. Однако, во-первых, судя по информации BOL, от предварительного плана для хранимок отказались, а во-вторых, теперь план выполнения кэшируется не только для хранимок, но и для любых запросов:
Хотя остается еще преимущество хранимок в плане производительности за счет того, что они из себе представляют скомпилированный код, а не сырой текст (в случае передачи sql запроса), который нужно парсить. Однако, как отмечается, в этой статье, которая направлена на то, чтобы развеять миф о превосходстве хранимок над сырыми sql-запросами, с компиляцией не все так просто:
Кроме того, существует такая проблема, как recompiling. Например, если создали новый индекс, который может повлиять на эффективность выполнения хранимки, она должна быть перекомпилирована. И на этом пути есть немало подводных камней... Интересно, что в списке преимуществ хранимых процедур Sql Server 2005 о производительности нет ни слова:
Неспроста это... Таким образом, отвечая на вопрос "отличается ли производительность скомпилированных linq to sql запросов и хранимых процедур", можно подытожить, что компиляция linq to sql запросов приближает их к скорости выполнения сырого sql (который, например, передается в SqlCommand в ADO.NET), минимизируя затраты на формирования sql из linq. А так как, в свою очередь, производительность sql запросов в современных версиях Sql Server сопоставима с производительностью хранимых процедур, то существенной разницы в скорости выполнения скомпилированных linq to sql запросов и хранимых процедур быть не должно. P. S. Sql Server для меня пока не более, чем хобби. Так что все вышеизложенное - imho. Поправьте, если не прав. PP. S. А вообще, было бы неплохо пригласить сюда кого-нибудь из раздела Sql Server, дабы подтвердили/опровергли информацию о хранимках. Это сообщение отредактировал(а) Idsa - 30.7.2008, 23:42 |
||||||
|
|||||||
AleXGray |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 18.1.2007 Репутация: нет Всего: 1 |
Ну во всяком случае я сделал вывод о том, что все это чуть медленнее чем сырые запросы... Спасибо Idsa
--------------------
В начале было Слово |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 5 Всего: 62 |
||||
|
||||
AleXGray |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 18.1.2007 Репутация: нет Всего: 1 |
Насчет удобнее я пока не решил. В принципе я уже настолько привык писать хранимки на скл... Практически любой сложности... в скл у меня обычно вся логика, в нете только привязка к контролам...
Безусловно майкрософтовскую генерацию классов использовать удобнее, чем с помощью самодельной утилиты шлепающей в стиле ADO.NET c дальнейшей подпилкой... но вот в плане селектов и пр., возможно ограничусь вызовом готовых процедур через LINQ. Хотя возможно и не ограничусь... ![]() --------------------
В начале было Слово |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: нет Всего: 232 |
Модератор: познавательную дискуссию о foreach вынес сюда.
-------------------- ![]() |
|||
|
||||
Fire44 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 17.9.2010 Репутация: нет Всего: -1 |
Кто-то проводил тесты?
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |