Ohoh .... так много вредных привычек.
Часть 2: Оптимизация В не столь далеком прошлом , ADO.NET дней, я имел обыкновение писать хранимые процедуры, выполнять его через DataReader, а затем петлю через DataReader, заполнить как можно больше объектов моего Модельный класс и передать его коллекции для привязки к DataGrid. В LINQ дней я делаю более или менее то же самое, что и , создавая множество объектов . Но я выполняю прямое операторов LINQ. Я догадываюсь, что SQL хранимых процедур даст мне более высокую производительность, но
В основном, в прошлом у вас были некоторые незначительные dlusions. Сохраненные процедуры имеют NO (!) Прирост производительности более 10 лет. Это четко указано в документации. Выполнение SQL выполняется так же быстро, как для не хранимых процедур, планы запросов кэшируются и повторно используются для обоих.
SP только хороши (как в: экономия времени), если они избегают круглых поездок (т. Е. Отправляют несколько пакетов запросов от клиента на сервер). И тогда сбережения не связаны с тем, что они хранят процедуры, но из-за того, что поездки туда и обратно стоят.
К сожалению, у многих программистов все еще есть заблуждения, потому что они получают их от других людей, которые их получили .... 10 лет назад, когда хранимые процедуры имели неотъемлемые преимущества. Теперь это время SQL Server 6.5 - с 7.0 это история.
http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx
В основном вы обращались потерянное время разработки и много бесполезного кода против .... mostlikely не измеримого преимущества.
Часть 1: Подключение Объединив & оптимизации: Я хочу знать, как я могу гарантировать, что LINQ устанавливает только один подключения к базе данных, а также следовать пулов соединений.
У вас нет. В принципе, не пытайтесь быть умнее, чем хорошо для вас. Что не так с несколькими соединениями, ЕСЛИ ОНИ СДЕЛАТЬ СМЫСЛ?
Для пула, yu should (sql server) не нужно ничего помещать в строку соединения. И да, LINQ не будет волшебным образом обойти пул соединений, определенный в строке соединения. См., LINQ никогда не разговаривает с базой данных - для этого используется ADO.NET, и ADO.NET не волшебным образом изменил поведение только потому, что ORB более высокого уровня использует его вместо вас. Строка соединения содержит записи объединения, ADO.NET все еще видит их и следует за ними.
Теперь, имея только одно соединение с базой данных из пула серверов, это одно: STUPID. Он ограничивает одну транзакцию за раз и полностью разрушает производительность, когда загрузка становится выше (т. Е. Одновременно нужно обрабатывать несколько запросов).
Я использую объект DataContext в «с помощью» блок в моем коде, где я обрабатывать данные, относящиеся часть. Это причина, почему LINQ может использовать несколько соединений? Если у меня есть DataContext в качестве переменной уровня класса, то обеспечит только одно соединение?
Ah - зависит. Это может иметь смысл, может и нет. Вы знаете, прежде чем думать, что у вас есть проблема, особенно учитывая объем информации, которую вы даете здесь (т. Е. Нет), делайте ТОЛЬКО разумную вещь: возьмите профилировщик и ИЗМЕРИТЕ, есть ли у вас один. Openng/закрытие соединения 100 раз или 1000 раз, скорее всего, даже не появится на профилировщике. Нет проблемы = нет причин что-то исправить.
Сказанное так, что мне не нравится открытие соединения метода. Обычно это показывает плохой дизайн класса. Соединения должны использоваться повторно в пределах единицы работы.
Какова фактическая проблема с производительностью? – Phill
Доступ к данным медленный, из-за чего общая производительность медленная. –
, поэтому проблема не в ORM или пуле соединений, а в самой базе данных. – Phill