При использовании 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()».
Спасибо.
Я никогда не слышал о том, чтобы иметь такие проблемы с управлением связью. Есть ли у вас рецензия на это, или ссылка, или что-либо, чтобы поддержать это заявление? Управление подключением является основной задачей блока данных, я бы ожидал услышать об этом до сих пор. –
Существует воспроизводимый случай, который я последовательно использовал как Entlib 4.0, так и 4.1. Там, где у пула просто закончились соединения. Поскольку Subsonic использует Entlib, я бы предположил, что это повлияет на сказанное выше. Таким образом, я делаю явные закрытия, так как я столкнулся с проблемой с entlib и никогда не имел проблем с подключением. Обратите внимание, что это было в высокой транзакционной системе с базой данных 400 ГБ. – chiefbrownbotom
Сообщаете ли вы об этом как об ошибке на сайте проекта Entlib на сайте entlib.codeplex.com? Если у вас есть, и я пропустил это, я приношу свои извинения. –