установки:ADO.NET Пулы соединений и последствия для AutoClose = True
Я создаю приложения .NET WinForms в C#, чтобы наши люди технической поддержки легко выполнять общие задачи в отношении нашего продукта SQL Server базы данных 2005. Приложение использует ADO.NET (SqlConnection
) для подключения к базе данных. Одной из проблем при разработке этого приложения было минимизировать накладные расходы на подключение/повторное подключение к базе данных каждый раз, когда инициируется задача (запрос). Основная причина этих издержек, по моему мнению, связана с базой данных, имеющей свойство AutoClose, равное «True». Я бы хотел изменить это, но, к сожалению, это не под моим контролем. Я также знаю, что создание соединения с базой данных связано с некоторыми непредвиденными расходами. У меня была рабочая реализация приложения, поддерживавшего единое соединение (если только оно не было закрыто раньше) через жизненный цикл приложения. Затем я наткнулся на статью MSDN по адресу connection pooling in ADO.NET.
После прочтения статьи (и другие вопросы/ответы here, here и here) оказывается, что ADO.NET пул соединений будет поддерживать соединение с базой данных, даже если мое приложение правильно утилизировать его SqlConnection
объекта. Соединение будет сохранено в пуле и будет повторно использоваться до тех пор, пока оно не будет работать в течение определенного периода времени или в противном случае будет нарушено. Таким образом, моя работа по поддержанию единственного соединения в приложении кажется ненужной и, безусловно, более опасной, чем просто создание/удаление SqlConnection
каждый раз, когда это необходимо.
Вопросы:
Какие последствия присутствуют при использовании ADO.NET Пулы соединений с базой данных SQL Server, с "AutoClose" установлено значение "истина"?
Я понимаю, что я могу упростить, когда я описываю, как я считаю, что объединение пулов работает за кулисами, но в стороне, насколько я понимаю? Если нет, то где это необходимо для коррекции?
Я полностью согласен с тем, что AutoClose следует отключить. К сожалению, у меня нет контроля или влияния в отношении этого решения. – dcharles
Что я буду делать, а не полагаться на объединение недоходного поведения (то есть, что такое * текущая база данных при удалении соединения в пул), я бы открывал очень явное соединение в приложении, исключительно для этой цели , При этом, кто имеет «влияние и контроль», он может заметить, что кто-то держит свою дорогую базу данных открытой и придет после вас с вилкой и факелом. –
Спасибо за помощь! – dcharles