Подтвердить что ты не робот

Сколько издержек производительности базы данных при использовании LINQ?

Сколько издержек производительности базы данных связано с использованием С# и LINQ по сравнению с пользовательскими оптимизированными запросами, загруженными в основном низкоуровневыми C, как с бэкэнд SQL Server 2008?

Я специально рассматриваю здесь случай, когда у вас есть довольно интенсивная для данных программа, и будет обновлять или обновлять данные по крайней мере один раз на экран и будет иметь 50-100 одновременных пользователей.

4b9b3361

Ответ 1

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

Это говорит... есть одно исключение; если один запрос генерирует несколько агрегатов, поставщик L2S переводит его в большой запрос с одним подзапросом на агрегат. Для большой таблицы это может иметь значительное влияние ввода-вывода, поскольку стоимость ввода-вывода db для запроса растет по величинам для каждого нового агрегата в запросе.

Обходной путь для этого - это, конечно, перемещение агрегатов в сохраненные proc или view. У Мэтта Уоррена есть пример кода для альтернативного поставщика запросов, который более эффективно преобразует такие запросы.

Ресурсы

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=334211

http://blogs.msdn.com/mattwar/archive/2008/07/08/linq-building-an-iqueryable-provider-part-x.aspx

Ответ 2

Спасибо Stu. Похоже, что LINQ to SQL, вероятно, не имеет значительных издержек производительности базы данных с более новыми версиями, если вы можете использовать скомпилированный выбор, а более медленные функции обновления, скорее всего, будут быстрее, если у вас нет ДЕЙСТВИТЕЛЬНО острый эксперт делает большую часть кодирования.