Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Производительность LINQ??? 
:(
    Опции темы
Wizard_Memfis
Дата 19.5.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 12.2.2007
Где: г. Донецк, Украин а

Репутация: нет
Всего: 4



Потихоньку начинаю ковырять LINQ, но возникают очень скептичные мысли по этому поводу. Насколько сильно это все тормозит??? smile Может у кого-то есть какие-то статьи, может кто-то сам тестил?Очень уж интересно, да и не верится что-то, что все так хорошо: как говорится, если где-то нашли, то в чем-то потеряли! smile 
Чтоб не получилось как с nHibernate: у меня знакомые на серьезной конторе отказались, сказав, что сильно все тормозит при большой базе!!!
 smile 
P. S. Прикольный ресурс накопал(все доступно и протсо)
http://blogs.gotdotnet.ru/personal/eisernw...a9-2871726a2d45

--------------------
www.binary-studio.com
PM MAIL WWW ICQ Skype   Вверх
namespace
Дата 19.5.2008, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



ну почему все гладко ?
вот меня мучает вопрос почему нельзя делать запрос на две базы
http://forum.vingrad.ru/forum/topic-211604.html
т.е. если бы я использовал ADO, sql server выдал бы мне сразу результат, а тут я вынужден сделать подзапросы их результаты к примеру .ToList() а потом только два полученных IEnumerable можно использовать в нужном запросе и сразу возникает вопрос а если два подзапроса имеют большой объём данных, это же надо все получить загрузить в память  smile  в случае с ADO этим занят SQL Server и возращает только результат
вообщем как то странно

Это сообщение отредактировал(а) namespace - 19.5.2008, 22:48
PM MAIL   Вверх
Wizard_Memfis
Дата 20.5.2008, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 12.2.2007
Где: г. Донецк, Украин а

Репутация: нет
Всего: 4



Протсо если это все работает в разы тормознутее, то...это все конечно красиво, но думаю что не нужно! smile 
--------------------
www.binary-studio.com
PM MAIL WWW ICQ Skype   Вверх
source777
Дата 20.5.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Wizard_Memfis, если тебя интересует Linq to SQL, то для SQL Server он работает даже быстрее, чем ADO.NET за счёт предварительной оптимизации запросов...

Добавлено через 10 минут и 8 секунд
Ну и ссылки:
http://dotnet.org.za/hiltong/archive/2008/...iderations.aspx
http://www.sidarok.com/web/blog/content/20...erformance.html


Цитата(Wizard_Memfis @  19.5.2008,  13:42 Найти цитируемый пост)
Чтоб не получилось как с nHibernate: у меня знакомые на серьезной конторе отказались, сказав, что сильно все тормозит при большой базе!!!
Скорее всего твои знакомые не осилили nHibernate, не сумели, так сказать, правильно им воспользоваться...



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Wizard_Memfis
Дата 20.5.2008, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 12.2.2007
Где: г. Донецк, Украин а

Репутация: нет
Всего: 4



To source777:
Спасибо за ссылки, именно это искал!
 smile 
P. S. А насчет друзей, может быть smile 


--------------------
www.binary-studio.com
PM MAIL WWW ICQ Skype   Вверх
HalkaR
Дата 20.5.2008, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



LinqToObjects работает довольно быстро (вобщем сравнимо со скоростью обычного перебора). Есть только 3 исключения. Это методы OrderBy, GrouypBy и Join. Они все заставляют немедленно выбрать весь список, а не обрабатывать его поэлементно.
PM MAIL   Вверх
Wizard_Memfis
Дата 20.5.2008, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 12.2.2007
Где: г. Донецк, Украин а

Репутация: нет
Всего: 4



А LinqToSQL?Есть по нем какая-то инфа?Может при большой базе лучше обычным способом? 
--------------------
www.binary-studio.com
PM MAIL WWW ICQ Skype   Вверх
source777
Дата 20.5.2008, 17:55 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(Wizard_Memfis @  20.5.2008,  17:26 Найти цитируемый пост)
А LinqToSQL?Есть по нем какая-то инфа?Может при большой базе лучше обычным способом?  
Ты слышал про такую вещь как закон дырявых абстракций? Так вот этот закон утверждает, что если пользователь абстракции не понимает как она устроена, то он с большой вероятностью рано или поздно попадёт в дыру этой абстракции... Что приведёт к экспотенциальному снижению всех показателей. 
Следствие из этого закона такое: если у тебя руки кривые, а изучать ты ничего не хочешь, то тебя никакие абстракции не спасут. В обратной ситуации ты можешь использовать любую абстракцию для повышения совокупной производительности... И чем масштабнее будет задача(или больше БД), тем больший выигрыш в производительности можно будет получить...



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Wizard_Memfis
Дата 21.5.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 12.2.2007
Где: г. Донецк, Украин а

Репутация: нет
Всего: 4



Насколько я помню, есть всем известная вешь:
Ниодин уровень абстракции не добавляет производительность! smile 
--------------------
www.binary-studio.com
PM MAIL WWW ICQ Skype   Вверх
source777
Дата 21.5.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата(Wizard_Memfis @  21.5.2008,  13:02 Найти цитируемый пост)
Насколько я помню, есть всем известная вешь:
Ниодин уровень абстракции не добавляет производительность! smile  
Такое утверждение разве что мифом можно назвать...  Если бы оно было истинным, то все до сих пор бы перфокарты пробивали, а не писали бы на языках высокого уровня...



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
zloyden
Дата 21.5.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 21.5.2008

Репутация: нет
Всего: нет



Цитата(source777 @ 21.5.2008,  14:16)
Такое утверждение разве что мифом можно назвать...  Если бы оно было истинным, то все до сих пор бы перфокарты пробивали, а не писали бы на языках высокого уровня...

Т.е. вы хотите сказать что программа написанная на Яве будет быстрее программы написанной на С++? Можно пример реально работающей программы? Просьба действительно работающее приложение, а не синтетический тест. Я верю что за счет динамической компиляции можно получить большую оптимизацию каких-то алгоритмов. Хотелось бы увидеть оконное приложение, которое бы потребляло меньше ресурсов и быстрее (субъективно для пользователя) программы на дельфи или С++.

Появление языков высокого уровня было обусловлено не ускорением работы софта, написанного на нем, а ускорением и упрощением времени разработки. Или вы будете утверждать что с тех пор производительность компьютеров не улучшилась?

Пользователи железом за упрощение работы программистов(т.е. нас с вами). Увеличение абстракции не дает скорости производительности(чаще всего наоборот), но дает скорость разработки, что позволяет разрабатывать более сложные вещи в разумные сроки.

P. S. вы случаем на яве не программировали?

P.P.S. Пользовался недолго клиентом Sparc, написанном на очень абстрактной яве. Какое увеличение производительности я получил? Зато я получил потребление памяти на уровне 100 мб. Для сравнения квип, написаный на куда менее абстрактном дельфи сейчас заниает 17 мегабайт оперативной памяти.

Это сообщение отредактировал(а) zloyden - 21.5.2008, 14:52
PM MAIL   Вверх
PashaPash
Дата 24.5.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 4
Всего: 49



Непонятно почему вообще появилось предположение что LINQ to SQL медленнее чем ADO.NET. На самом деле он быстрее, даже на простых запросах. Возьмите и померяйте.
http://blog.microsoft-j.net/2008/04/16/Lin...impleQuery.aspx


--------------------
PM MAIL WWW   Вверх
Veitmen
Дата 24.5.2008, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 10.11.2006
Где: СПБ

Репутация: нет
Всего: 4



Цитата(PashaPash @  24.5.2008,  14:18 Найти цитируемый пост)
Непонятно почему вообще появилось предположение что LINQ to SQL медленнее чем ADO.NET. На самом деле он быстрее, даже на простых запросах. Возьмите и померяйте.


Да я вообще то не говорил про Linq to sql. Я про linq говорил в целом. А с Ado сравнивать толку нет. Работа идет по другому.Надо сравнивать с другими ORM технологиями. Для пример NHibernate. Но Linq MS продукт, так что...
PM MAIL ICQ   Вверх
PashaPash
Дата 24.5.2008, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 4
Всего: 49



Veitmen, какой смысл говорить о производительности LINQ в целом? Затраты на операции над запросами в LINQ в на пару порядков меньше чем задержки сети и выборки данных. NHibernate если и выиграет у LINQ to NHibernate пару миллисекунд, то пользователь этого не заметит. А LINQ to SQL, судя по гуглу, работает с той же скоростью, что и NHibernate.


--------------------
PM MAIL WWW   Вверх
Veitmen
Дата 24.5.2008, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 10.11.2006
Где: СПБ

Репутация: нет
Всего: 4



Хы. Читайте все посты. Не то я говорил совсем.
Цитата(PashaPash @  24.5.2008,  17:13 Найти цитируемый пост)
Veitmen, какой смысл говорить о производительности LINQ в целом?


Тема такая. Подразумевается вообще LINQ в вопросе я думаю. 

Цитата(PashaPash @  24.5.2008,  17:13 Найти цитируемый пост)
NHibernate если и выиграет у LINQ to NHibernate пару миллисекунд, то пользователь этого не заметит. А LINQ to SQL, судя по гуглу, работает с той же скоростью, что и NHibernate. 

Хм, дайте ссылку где это написано. Я если честно не знал...
PM MAIL ICQ   Вверх
PashaPash
Дата 24.5.2008, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 4
Всего: 49





--------------------
PM MAIL WWW   Вверх
akizelokro
Дата 29.5.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: нет
Всего: 5



У меня была одна простенькая база. Сначала я ее работал с ADO.NET, затем на Linq. Визуально разницы в работе не видно.
Linq на первый взгляд кажется удобным инструментом. У меня есть, подозрение, что можно даже объединить в одном DataContext "живую" базу с "посторонними объектами", чего нельзя было сделать в одном DataSource (imho).
Возможная потеря производительности на уровне 10% не считается критичной (иначе бы все писале на асме или С). К тому же, на уровне баз данных такая разница не суть проблема для неопытного программиста навроде меня. Я могу и больше! smile  без всякого нового инструментария



--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
AleXGray
Дата 30.7.2008, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 18.1.2007

Репутация: нет
Всего: 1



А можно сходный вопрос?

Начал колупать LINQ, наткнулся на утверждение:
"Линк запросы компилируются. "
Быстродействие хранимок по сравнению с обычными запросами, написанными в коде в обычном ADO.NET основано на том, что хранимки тоже предварительно компилируются.

Значит ли это, что теперь скорость выполнения запроса при вызове хранимой процедуры (в том же линке) примерно равна скорости аналогичного запроса, написанного в коде с помощью линк-технологии?
--------------------
В начале было Слово
PM MAIL   Вверх
Idsa
Дата 30.7.2008, 23:28 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 5
Всего: 62



Цитата(AleXGray @  31.7.2008,  00:09 Найти цитируемый пост)
Значит ли это, что теперь скорость выполнения запроса при вызове хранимой процедуры (в том же линке) примерно равна скорости аналогичного запроса, написанного в коде с помощью линк-технологии? 

И да, и нет.
Скомпилированный 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, от предварительного плана для хранимок отказались, а во-вторых, теперь план выполнения кэшируется не только для хранимок, но и для любых запросов:
Цитата

In SQL Server version 6.5 and earlier, stored procedures were a way to partially precompile an execution plan. At the time the stored procedure was created, a partially compiled execution plan was stored in a system table. Executing a stored procedure was more efficient than executing an SQL statement because SQL Server did not have to compile an execution plan completely, it only had to finish optimizing the stored plan for the procedure. Also, the fully compiled execution plan for the stored procedure was retained in the SQL Server procedure cache, meaning that subsequent executions of the stored procedure could use the precompiled execution plan.

SQL Server 2000 and SQL Server version 7.0 incorporate a number of changes to statement processing that extend many of the performance benefits of stored procedures to all SQL statements. SQL Server 2000 and SQL Server 7.0 do not save a partially compiled plan for stored procedures when they are created. A stored procedure is compiled at execution time, like any other Transact-SQL statement. SQL Server 2000 and SQL Server 7.0 retain execution plans for all SQL statements in the procedure cache, not just stored procedure execution plans. The database engine uses an efficient algorithm for comparing new Transact-SQL statements with the Transact-SQL statements of existing execution plans. If the database engine determines that a new Transact-SQL statement matches the Transact-SQL statement of an existing execution plan, it reuses the plan. This reduces the relative performance benefit of precompiling stored procedures by extending execution plan reuse to all SQL statements.

Хотя остается еще преимущество хранимок в плане производительности за счет того, что они из себе представляют скомпилированный код, а не сырой текст (в случае передачи sql запроса), который нужно парсить. Однако, как отмечается, в этой статье, которая направлена на то, чтобы развеять миф о превосходстве хранимок над сырыми sql-запросами, с компиляцией не все так просто:
Цитата

When SQL Server executes stored procedures, any parameter values used by the procedure when it compiles are included as part of generating the query plan. If these values represent the typical ones with which the procedure is called subsequently, then the stored procedure benefits from the query plan each time it compiles and executes. If not, performance may suffer.

Кроме того, существует такая проблема, как recompiling. Например, если создали новый индекс, который может повлиять на эффективность выполнения хранимки, она должна быть перекомпилирована. И на этом пути есть немало подводных камней...
Интересно, что в списке преимуществ хранимых процедур Sql Server 2005 о производительности нет ни слова:
Цитата

The benefits of using stored procedures in SQL Server rather than Transact-SQL programs stored locally on client computers are:

    * They are registered at the server.
    * They can have security attributes (such as permissions) and ownership chaining, and certificates can be attached to them.
      Users can be granted permission to execute a stored procedure without having to have direct permissions on the objects referenced in the procedure.
    * They can enhance the security of your application.
      Parameterized stored procedures can help protect your application from SQL Injection attacks. For more information see SQL Injection.
    * They allow modular programming.
      You can create the procedure once, and call it any number of times in your program. This can improve the maintainability of your application and allow applications to access the database in a uniform manner.
    * They are named code allowing for delayed binding.
      This provides a level of indirection for easy code evolution.
    * They can reduce network traffic.
      An operation requiring hundreds of lines of Transact-SQL code can be performed through a single statement that executes the code in a procedure, rather than by sending hundreds of lines of code over the network.

Неспроста это...

Таким образом, отвечая на вопрос "отличается ли производительность скомпилированных 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


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
AleXGray
Дата 30.7.2008, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 18.1.2007

Репутация: нет
Всего: 1



Ну во всяком случае я сделал вывод о том, что все это чуть медленнее чем сырые запросы... Спасибо  Idsa
--------------------
В начале было Слово
PM MAIL   Вверх
Idsa
Дата 31.7.2008, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 5
Всего: 62



Цитата(AleXGray @  31.7.2008,  03:58 Найти цитируемый пост)
Ну во всяком случае я сделал вывод о том, что все это чуть медленнее чем сырые запросы...

Но зато насколько удобнее...
Да и закон Мура нас лентяев уже который десяток лет выручает smile


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
AleXGray
Дата 31.7.2008, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 18.1.2007

Репутация: нет
Всего: 1



Насчет удобнее я пока не решил. В принципе я уже настолько привык писать хранимки на скл... Практически любой сложности... в скл у меня обычно вся логика, в нете только привязка к контролам...
Безусловно майкрософтовскую генерацию классов использовать удобнее, чем с помощью самодельной утилиты шлепающей в стиле ADO.NET c дальнейшей подпилкой... но вот в плане селектов и пр., возможно ограничусь вызовом готовых процедур через LINQ.
Хотя возможно и не ограничусь... smile 
--------------------
В начале было Слово
PM MAIL   Вверх
mr.DUDA
Дата 4.8.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: нет
Всего: 232



Модератор: познавательную дискуссию о foreach вынес сюда.


--------------------
user posted image
PM MAIL WWW   Вверх
Fire44
Дата 22.9.2010, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 17.9.2010

Репутация: нет
Всего: -1



Кто-то проводил тесты?
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.0983 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.