Лучшая практика? раскройте и закройте multi соединения, или одно большое открытое соединение для ado.net

Я использую 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 ответов


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

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

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


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


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

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

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


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

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

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