Информация об изменениях

Сообщение Re[67]: Тормознутость и кривость linq от 14.04.2016 7:03

Изменено 14.04.2016 7:21 Serginio1

Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, Serginio1, Вы писали:


S>>Кстати там же сравнение с ServiceStack.OrmLite

S>>https://github.com/ServiceStack/ServiceStack.OrmLite

_>И ServiceStack.OrmLite и Dapper работают не через Linq. А я здесь говорил о тормознутости именно такого решения, а не вообще всех ORM в .Net. В том же linq2sql, не смотря на название, есть вариант работы без linq, который очень эффективен.


Что по твоему Linq?

OrmLite provides terse and intuitive typed API's for database querying from simple lambda expressions to more complex LINQ-Like Typed SQL Expressions which you can use to construct more complex queries. To give you a flavour here are some examples:


LINQ — это набор появившихся в Visual Studio 2008 функций, которые значительно расширяют возможности синтаксиса языков C# и Visual Basic. LINQ предлагает стандартные, легко запоминающиеся шаблоны для выполнения запросов и обновления данных, и эта технология может быть расширена с целью поддержки теоретически любого типа хранилища данных. Visual Studio содержит сборки поставщиков LINQ, позволяющие использовать LINQ с коллекциями .NET Framework, базами данных SQL Server, объектами DataSet ADO.NET и XML-документами.


Linq это по сути работа с IEnumerable и их наследниками
IQueryable<out T> : IEnumerable<T>, IEnumerable, 
    IQueryable


С выводом типа и ленивыми вычислениями

И я тебе уже 150000 раз говорил про возможность предварительной компиляции запроса. То есть построение запроса делается только один раз. Кстати в тестах даппера это есть. Но ты опять ничего не видишь

Performance of SELECT mapping over 500 iterations — typical usage


Method

Duration

Remarks

Linq 2 SQL CompiledQuery 81ms Not super typical involves complex code
NHibernate HQL 118ms
Linq 2 SQL 559ms
Entity framework 859ms
SubSonic ActiveRecord.SingleOrDefault 3619ms


Скомпилированные запросы (LINQ to Entities)
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, Serginio1, Вы писали:


S>>Кстати там же сравнение с ServiceStack.OrmLite

S>>https://github.com/ServiceStack/ServiceStack.OrmLite

_>И ServiceStack.OrmLite и Dapper работают не через Linq. А я здесь говорил о тормознутости именно такого решения, а не вообще всех ORM в .Net. В том же linq2sql, не смотря на название, есть вариант работы без linq, который очень эффективен.


Что по твоему Linq?

OrmLite provides terse and intuitive typed API's for database querying from simple lambda expressions to more complex LINQ-Like Typed SQL Expressions which you can use to construct more complex queries. To give you a flavour here are some examples:


LINQ — это набор появившихся в Visual Studio 2008 функций, которые значительно расширяют возможности синтаксиса языков C# и Visual Basic. LINQ предлагает стандартные, легко запоминающиеся шаблоны для выполнения запросов и обновления данных, и эта технология может быть расширена с целью поддержки теоретически любого типа хранилища данных. Visual Studio содержит сборки поставщиков LINQ, позволяющие использовать LINQ с коллекциями .NET Framework, базами данных SQL Server, объектами DataSet ADO.NET и XML-документами.


Linq это по сути работа с IEnumerable и их наследниками
IQueryable<out T> : IEnumerable<T>, IEnumerable, 
    IQueryable


С выводом типа и ленивыми вычислениями

И я тебе уже 150000 раз говорил про возможность предварительной компиляции запроса. То есть построение запроса делается только один раз. Кстати в тестах даппера это есть. Но ты опять ничего не видишь

Performance of SELECT mapping over 500 iterations — typical usage


Method

Duration

Remarks

Linq 2 SQL CompiledQuery 81ms Not super typical involves complex code
NHibernate HQL 118ms
Linq 2 SQL 559ms
Entity framework 859ms
SubSonic ActiveRecord.SingleOrDefault 3619ms


Скомпилированные запросы (LINQ to Entities)

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