Пул подключений позволяет более эффективно управлять таким ресурсом, как соединение с базой данных. Когда после завершения очередной операции с базой данных вы вызываете метод OleDbConnection.Close(), соединение с базой отправляется в пул и остается открытым там ещё некоторое время. По умолчанию это время - 60 секунд. Когда клиент инициирует новое соединение с базой, провайдер сначала запрашивает его из пула и только потом, если такого не нашлось, создает новый ресурс. Подходит соединение или нет, определяется по точному соответствию свойства ConnectionString с учетом регистра.
Настройка пула подключений осуществляется при помощи параметра строки подключения «Ole Db Services». Значение параметра – это битовая комбинация следующих флагов:
| DBPROPVAL_OS_ENABLEALL | -1 | Используются все сервисы |
| DBPROPVAL_OS_RESOURCEPOOLING | 1 | Ресурсы должны помещаться в пул |
| DBPROPVAL_OS_TXNENLISTMENT | 2 | При необходимости сессии должны быть автоматически подключены к глобальной транзакции |
| DBPROPVAL_OS_AGR_AFTERSESSION | 8 | Поддержка операций за пределами сессии |
| DBPROPVAL_OS_CLIENTCURSOR | 4 | Поддержка клиентских курсоров на уровне OLE DB Services, если их не поддерживает управляемый провайдер |
| DBPROPVAL_OS_DISABLEALL | 0 | Все сервисы отключены |
В примерах к статье класс OleDbServicesValues содержит константы для всех этих флагов. Для комбинации флагов можно использовать операцию побитового исключения (& ~) констант невостребованных сервисов из константы DBPROPVAL_OS_ENABLEALL.
Следующий пример тестирует производительность при использовании различных Ole Db сервисов:
public void OleDbServicesTest() { const int connection_count = 50;
//хранит результат работы по всем операциям
Dictionary<string, double> timeResults = new Dictionary<string, double>();
OleDbConnectionStringBuilder builder = ConnectionProvider.GetConnectionStringBuilderFromUDL();
//OLE DB SERVISES = Все сервисы включены
builder.OleDbServices = OleDbServicesValues.EnableAll; timeResults.Add( String.Format("OLE DB Services=EnableAll ({0})", builder.OleDbServices), DoConnections(builder, connection_count));