4.1.5. Работа с пулом соединенийПодключение к базе данных требует затрат времени, в частности, на установление соединения по каналам связи, прохождение аутентификации, и лишь после этого можно выполнять запросы и получать данные. Клиентское приложение, взаимодействующее с базой данных и закрывающее каждый раз соединение при помощи метода Close, будет не слишком производительным: значительная часть времени и ресурсов будет тратиться на установку повторного соединения. Решением данного затруднения может быть использование трехуровневой модели, при которой клиентское соединение будет взаимодействовать с базой данных через промежуточный сервер. В этой модели клиентское приложение открывает соединение через промежуточный сервер (рис. 62, А). После завершения работы соединение закрывается приложением, но промежуточный сервер продолжает удерживать его в течение заданного промежутка времени, например, 60 секунд. По истечении этого времени промежуточный сервер закрывает соединение с базой данных (рис. 62, Б). Если в течение этой минуты, например, после 35 секунд, клиентское приложение снова требует связи с базой данных, то сервер просто предоставляет уже готовое соединение, причем после завершения работы обнуляет счет времени и готов снова минуту ждать обращения (рис. 62, В). Рис. 62. Трехуровневая модель соединения с базой данных Использование этой модели позволяет сократить время, необходимое для установки связи с удаленной базой данных, и повысить эффективность работы приложения. Промежуточный сервер будет выступать в качестве пула соединений. Более того, если к нему будут обращаться несколько клиентских приложений, использующих одинаковую базу данных и параметры авторизации, то выигрыш времени будет еще более заметным. При создании подключения с использованием поставщиков данных .NET автоматически создается пул соединений. При вызове метода Close соединение не разрывается, а по умолчанию помещается в пул. В течение 60 секунд соединение остается открытым, и если оно не используется повторно, поставщик данных закрывает его. Если же по каким-либо причинам необходимо закрывать соединение, не помещая его в пул, в строке соединения СonnectionString нужно вставить дополнительный параметр. Для поставщика OLE DB: OLE DB Services=-4; Теперь при вызове метода Close соединение действительно будет разорвано. Поставщик данных Microsoft SQL Server предоставляет также дополнительные параметры управления пулом соединений (таблица 12). Таблица 12. Параметры пула соединения поставщика MS SQL Server
Для задания значения параметра, отличного от принятого по умолчанию, следует явно включить его в строку ConnectionString. Помещение соединений в пул, включенное по умолчанию, - одно из средств повышения производительности приложений. Не следует без надобности отключать эту возможность.
|