LINQ является новым и имеет свое место. LINQ не изобретен для замены хранимой процедуры.
Здесь я сфокусируюсь на некоторых мифах о производительности & CONS, только для "LINQ к SQL", конечно, я мог бы быть полностью неправым;-)
(1) Люди говорят, что LINQ statment может "кэшироваться" в SQL-сервере, таким образом, это не теряет производительность. Частично верный. "LINQ к SQL" на самом деле является временем выполнения, переводящим синтаксис LINQ в TSQL statment. Таким образом с точки зрения производительности, трудный кодированный SQL-оператор ADO.NET не имеет никакого различия, чем LINQ.
(2), Учитывая пример, обслуживание клиентов UI имеет "функцию" передачи учетной записи. эта функция сама могла бы обновить 10 Таблиц базы данных и возвратить некоторые сообщения в одном выстреле. С LINQ необходимо создать ряд операторов и отправить их как один пакет к SQL-серверу. производительность этого перевела LINQ->, пакет TSQL может едва соответствовать хранимой процедуре. Причина? потому что можно настроить самую маленькую единицу оператора в Сохраненной процедуре при помощи встроенного инструмента профилировщика SQL и плана выполнения, Вы не можете сделать этого в LINQ.
точка при разговоре единственной Таблицы базы данных и маленького набора CRUD данных, LINQ с такой скоростью, как SP. Но для намного более сложной логики, хранимая процедура является большим количеством tweakable производительности.
(3) "LINQ к SQL" легко делает новичков для представления пожирателей ресурсов производительности. Любой старший парень TSQL может сказать Вам если не использовать КУРСОР (В основном, что Вы не должны использовать КУРСОР в TSQL в большинстве случаев). С LINQ и очаровательным "foreach" циклом с запросом, для новичка настолько легко записать такой код:
foreach(Customer c in query)
{
c.Country = "Wonder Land";
}
ctx.SubmitChanges();
Вы видите, что этот легкий достойный код так привлекателен. Но под капотом, время выполнения.NET просто переводит это в пакет обновления. Если существует только 500 строк, это - 500 строк пакет TSQL; Если существует миллион строк, это имеет успех. Конечно, опытный пользователь не будет использовать этот способ сделать, это задание, но точка, настолько легко упасть таким образом.
Каждая подсистема получает модуль. Конечно, определение того, что оправдывает категоризацию как «подсистема», зависит от ...
В некоторых случаях ответственность за некоторые привязки переносится на более высокий уровень, поскольку подсистема / компонент более низкого уровня не в состоянии сделать окончательное авторитетное решение - в некоторых случаях это может быть достигнуто путем передачи параметров в модуль.