SubSonic - Нужно вручную принудительно закрыть соединения? - PullRequest
0 голосов
/ 16 ноября 2010

При использовании Enterprise Library возникла проблема с необходимостью вручную закрывать соединения с БД, поскольку GC при сканировании кучи ищет элементы вне области видимости.

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

Таким образом, добавление ручной проверки соединения и принудительное закрытие соединения является хорошей формой.

Теперь возьмите SubSonic. С помощью базы EntLib я делаю следующее в блоке finally:

        public static bool GetISOCountryCodes(out DataSet dsISOCountryCodes, out Response dbResponse)
    {
        dbResponse = new Response();
        dsISOCountryCodes = new DataSet();
        StoredProcedure sp = null;
        try
        {
            sp = SPs.GetISOCountryCodes(null);
            dsISOCountryCodes = sp.GetDataSet();

            // set the response object properties
            dbResponse = new Response((int)sp.OutputValues[0]);

            return dbResponse.IsValid;
        }
        catch (System.Exception ex)
        {
            return dbResponse.IsValid;               
        }
        finally
        {
                if (sp.Command != null && sp.Command.ToDbCommand().Connection != null &&
                sp.Command.ToDbCommand().Connection.State == ConnectionState.Open)
                sp.Command.ToDbCommand().Connection.Close();
        }
    }

Я знаю, что было сказано, что вам не нужно делать это вручную, поскольку SubSonic сделает это за вас, однако, я хотел бы знать, сталкивался ли кто-нибудь с проблемами, когда SubSonic не закрывал соединения (еще раз, как он использует EntLib в корне), и если есть лучшие способы сделать это.

Очевидно, что во всех моих методах вызова данных я буду ссылаться на один, скажем, метод ConnectionCloser ().

Спасибо.

1 Ответ

0 голосов
/ 14 января 2011

Этот пост был скорее уведомлением для обсуждения.Тем не менее, я не уверен, была ли проблема действительно решена с v5.Поэтому, по сути, ответ - продолжить проверку в блоке finally.

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