Просто добавив некоторую информацию, которая успешно работает для меня годами (это несколько похоже на то, что Дэвид-В-Фентон предлагает )
Во-первых, OleDbConnection
для Microsoft Access (MDB, JET) не с использованием пула соединений.Как Microsoft заявляет в KB191572 :
Соединения, в которых используются поставщики Jet OLE DB и драйверы ODBC, не объединяются в пул, поскольку эти поставщики и драйверы не поддерживают пул.
Что касается пула соединений, существует также это сообщение в блоге от Ивана Митева , в котором говорится:
Так что это значит?Очевидно, что наличие активно открытого соединения сделало тест с многократным закрытием и открытием соединения намного быстрее (в 2-3 раза).Единственное возможное объяснение для меня - то, что пул соединений освобождается каждый раз, когда нет активных соединений.Я должен провести дальнейшие исследования и прочитать что-то вроде пула в компонентах доступа к данным Microsoft.Или, может быть, удерживать одно открытое соединение только для того, чтобы пул оставался в живых.Это было бы некрасиво, но все же это достаточно хороший обходной путь!Если у кого-то есть идея получше, поделитесь ею.
И заметки Microsoft в MSDN :
Объект ADO Connection неявно использует IDataInitialize.Однако это означает, что ваше приложение должно постоянно сохранять хотя бы один экземпляр объекта Connection для каждого уникального пользователя.В противном случае пул будет уничтожен при закрытии последнего объекта Connection для этой строки.
На основании всего этого и моих собственных тестов мое решение для "имитации" пула соединенийдаже с базами данных Microsoft Access примерно выполняет следующие действия:
- Откройте одну
OleDbConnection
для базы данных Access как можно раньше в жизненном цикле приложения. - Выполняйте обычные запросы SQL, располагая
OleDbConnection
с как можно раньше, как рекомендовано. - Утилизируйте один всегда открытый
OleDbConnection
как можно позже в жизненном цикле приложения.
Это ускорило мои приложения (в основном это WinForms).
Обратите внимание, что это также работает для Sqlite, который, похоже, также не поддерживает пул соединений.