Лучшая практика? откройте и закройте много соединения или одно большое открытое соединение для 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();
}
12
задан sparkyShorts 30 January 2018 в 19:29
поделиться

4 ответа

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

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

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

7
ответ дан 2 December 2019 в 21:01
поделиться

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

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

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

1
ответ дан 2 December 2019 в 21:01
поделиться

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

4
ответ дан 2 December 2019 в 21:01
поделиться

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

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

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

2
ответ дан 2 December 2019 в 21:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: