Когда закрывать соединение с oracle db от Asp.net - PullRequest
0 голосов
/ 09 января 2019

Я использую приложение asp.net для извлечения моих данных из oracle db и возврата их как json, чтобы использовать их в моем приложении для Android.

Мне было интересно, нужно ли мне открывать, закрывать соединение с БД каждый раз, когда я делаю запрос, или лучше один раз открыть соединение и оставить его открытым, потому что приложение, которое я программирую, будет открыто примерно 24 часа / 7д.

Я читал кое-что о пуле подключений, но меня это немного смущает,

потому что я не знаю, будет ли использоваться пул соединений, поскольку я использую мобильное приложение, чтобы спросить мое приложение asp.net.

Заранее благодарю за ваши ответы.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Я предполагаю, что ваша служба не имеет статуса. Затем соединения автоматически завершаются после каждого запроса, и все, что остается в памяти, очищается (если оно не статично). Но, тем не менее, было бы лучше, если бы вы завернули все, что вы делаете, в базу данных. Это автоматически закроет все соединения и очистит все. например =>

using (System.Data.IDbConnection con = DBFactory.CreateDbConnection(Session))
{
    using (System.Data.IDbCommand cmd = DBFactory.CreateDbCommand(con))
    {

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

Надеюсь, это поможет!

0 голосов
/ 09 января 2019

У вас есть 3 варианта.

  1. Открывать и закрывать базу данных по каждому запросу.
  2. Открыть базу данных при Инициализации, закрыть ее на Page_UnLoad или OnError
  3. Откройте базу данных навсегда, закройте ее при повторном использовании.

Мы начинаем с (1), затем оптимизируем, если можем, с помощью (2), и избегаем (3).

Почему мы избегаем опции 3d, потому что мы, вероятно, можем закончиться конфликтами при вызове, если у нас много пулов или много потоков, а также, вероятно, осталось много открытых соединений, которые могут оказаться свободными для использования.

Нам нужен (1) по умолчанию, потому что нам всегда нужен дополнительный вызов для запроса чего-либо из базы данных -

И мы оптимизируем с помощью (2), потому что при рендеринге страницы нам обычно требуется более одного вызова базы данных - одно общее открытое соединение только для одного вызова может немного увеличить скорость.

...