Является ли Linq to SQL быстрее, чем Linq to Entities?

У меня была дискуссия с моим коллегой. Мы используем Linq to Sql на работе, и я новичок в этой работе, поэтому я спросил его, почему мы не используем Linq to Entities? Он привел несколько аргументов, и один из них был «Потому что Linq to Entities медленнее, чем linq to Sql». Я немного скептически отношусь к этому, я знаю, что Linq to Entities сложнее и имеет дополнительные функции, но я не понимаю, почему он медленнее.

Linq to Entities работает медленнее? Что было бы хорошим ответом на такой аргумент?


person NomenNescio    schedule 15.11.2011    source источник
comment
Попросите вашего коллегу показать вам тесты.   -  person Oded    schedule 16.11.2011
comment
Это зависит от обстоятельств! - как всегда :-) Linq-to-SQL представляет собой довольно упрощенное одноуровневое сопоставление - таблица становится классом в .NET. Entity Framework намного сложнее, вы можете сопоставить несколько таблиц с одним классом. Итак, для простых сценариев: да, Linq-to-SQL должен быть немного быстрее. НО: EF (по крайней мере, в версии 4) позволяет очень хорошо интегрировать хранимые процедуры, что снова может немного повысить вашу производительность - L2S немного запутан и неуклюж с sprocs... так что это может быть плюс для EF4 снова....   -  person marc_s    schedule 16.11.2011
comment
Кроме того, я считаю, что SQL, сгенерированный EF4, часто более зрелый и может быть немного быстрее, чем некоторые операторы SQL, сгенерированные Linq-to-SQL. Но различия, вероятно, будут довольно редкими и возникнут только в конкретных случаях использования.....   -  person marc_s    schedule 16.11.2011


Ответы (2)


Вероятно, это связано с проблемами производительности в ранних версиях Entity Framework.

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

При этом, это действительно зависит от того, что вы тестируете — тесты и профилирование — единственный способ сказать это. Linq To SQL будет быстрее для определенных операций, но EF также будет быстрее для других. При этом EF теперь предоставляет гораздо больше возможностей для обхода ограничений и проблем, поэтому со временем он, вероятно, будет более настраиваемым.

person Reed Copsey    schedule 15.11.2011
comment
@Steven Хотя я согласен, что это очень веская причина не выбирать его для новой разработки, на самом деле это не влияет на его производительность;) - person Reed Copsey; 16.11.2011
comment
+1. Также стоит отметить, что следующая версия Entity Framework обещает автоматически кэшировать запросы, что, вероятно, даст значительный прирост производительности как по сравнению с текущей версией, так и с LINQ to SQL. - person StriplingWarrior; 16.11.2011

С точки зрения чистой производительности LINq To SQL должен быть немного быстрее, потому что он использует один уровень сопоставления, в то время как Linq to Entities имеет два уровня сопоставления, и дополнительное сопоставление может привести к снижению производительности.

Однако вам следует провести некоторые тесты в вашем собственном контексте использования, потому что в большинстве случаев различия в производительности не могут быть замечены...

person aleroot    schedule 15.11.2011