Лучшая практика? открывать и закрывать несколько соединений или одно большое открытое соединение для ado.net - PullRequest
11 голосов
/ 27 июля 2010

Я использую ADO.Net для подключения к некоторым базам данных, и я просто надеялся, что все сделал правильно.Я открываю и закрываю несколько соединений для каждой хранимой процедуры.Или я должен обернуть это в одно открытое соединение (возможно, меньше ресурсов в базе данных?), Спасибо, и если есть что-то странное или что-то, что я мог бы сделать лучше, дайте мне знать, спасибо!

Пример: это, но у меня как 6 из них ...

using (SqlConnection conn = new SqlConnection(ConnectionString))
{
    SqlCommand cmd = new SqlCommand("spSelectAllTrip", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    conn.Open();
    ddlTripTypeA.DataSource = cmd.ExecuteReader();
    ddlTripTypeA.DataTextField = "TripType";
    ddlTripTypeA.DataValueField = "TripTypeAID";
    ddlTripTypeA.DataBind();
}
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
    SqlCommand cmd = new SqlCommand("spSelectAllTripB", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    conn.Open();
    ddlTripTypeB.DataSource = cmd.ExecuteReader();
    ddlTripTypeB.DataTextField = "TripType";
    ddlTripTypeB.DataValueField = "TripTypeBID";
    ddlTripTypeB.DataBind();
}

Ответы [ 4 ]

6 голосов
/ 27 июля 2010

.Net уже управляет пулингом соединений, поэтому вам не нужно беспокоиться о повторном использовании соединений, как вы могли бы использовать со старым asp.Я всегда выполняю несколько небольших быстрых звонков против того, чтобы держать один открытый все время, потому что не все время, когда он открыт, обычно используется для звонков.У вас есть код вашего сайта, выполняющий некоторые вещи между ними.

Теперь, если вы собираетесь делать 6 последовательных вызовов один за другим, тогда может иметь смысл открыть один и использовать повторно.Но кроме этого я говорю, просто придерживайтесь того, что вы делаете.

Единственное, что вам может понадобиться - это менеджер соединений, чтобы вам не приходилось создавать объект соединения в .net снова и снова.снова.Но это не имеет никакого отношения к соединениям с БД, а только к созданию объектов.

3 голосов
/ 27 июля 2010

Вы должны держать соединения открытыми как можно быстрее.Таким образом, вы хотите открыть соединение, выполнить запрос или хранимую процедуру, а затем закрыть соединение.Хотя это звучит дорого, оно использует встроенный пул соединений ADO.NET.Когда вы закрываете соединение, оно возвращается в пул и используется повторно, поэтому вы не страдаете от снижения производительности.

1 голос
/ 27 июля 2010

Лучший способ сделать это - подготовить обе команды, а затем открыть соединение и выполнить их обе в быстрой последовательности:

conn.Open();
comm1.ExecuteReader();
comm2.ExecuteReader();

Всегда держите их открытыми в течение максимально короткого времени.

1 голос
/ 27 июля 2010

ADO.Net использует пул соединений, так что это должно снизить стоимость открытия новых соединений, избегая необходимости открывать одно соединение во всем приложении.

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

Если любой программист ADO.Net может подтвердить или исправить это, пожалуйста, сделайте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...