0

При использовании Enterprise Library возникла проблема с необходимостью вручную закрывать соединения db, поскольку GC при сканировании кучи ищет объекты вне видимости.SubSonic - Вам нужно вручную отключить соединения?

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

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

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

 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 будет делать это для вас, однако, я d хотел бы знать, столкнулся ли кто-нибудь с проблемами с SubSonic, не закрывая соединения (еще раз, поскольку он использует EntLib в корне), и если есть более эффективные способы решения этой проблемы.

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

Спасибо.

+0

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

+0

Существует воспроизводимый случай, который я последовательно использовал как Entlib 4.0, так и 4.1. Там, где у пула просто закончились соединения. Поскольку Subsonic использует Entlib, я бы предположил, что это повлияет на сказанное выше. Таким образом, я делаю явные закрытия, так как я столкнулся с проблемой с entlib и никогда не имел проблем с подключением. Обратите внимание, что это было в высокой транзакционной системе с базой данных 400 ГБ. – chiefbrownbotom

+0

Сообщаете ли вы об этом как об ошибке на сайте проекта Entlib на сайте entlib.codeplex.com? Если у вас есть, и я пропустил это, я приношу свои извинения. –

ответ

0

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

Смежные вопросы