Такое поведение является нормальным, потому что если вы Dispose();
соединение, ConnectionPool от Oracle на самом деле не уничтожает соединение, а устанавливает статус «свободно». Поэтому в следующий раз, когда вы открываете соединение, вы на самом деле не открываете новое соединение, вы просто ищете «свободное» соединение в своем пуле соединений и используете его. Если свободного подключения не существует, будет создано новое.
Такое поведение гарантирует лучшую производительность, потому что Open/Close Connections стоит очень дорого.
Если вы используете:
using(OracleConnection con = new OracleConnection(constring))
{
}
or
con.Close();
Это то же самое, что вы используете Dispose();
. Используя, просто убедитесь, что Dispose вызывается в конце вашего блока использования. Вот почему использование работает только с объектами, которые реализуют IDisposable.
Пока все в порядке... Но почему OracleConnection.ClearAllPools()
не закрывает соединения? Это действительно так, но Oracle напрямую создает новое соединение, так что ваш ConnectionPool заполняется до вашего MinPool-Size. Вот почему код BigTallJosh:
«Минимальный размер пула = 0; Максимальный размер пула = 16; Размер пула увеличения = 2; Размер пула уменьшения = 1; Проверить соединение = Ложь; Время жизни соединения = 0;
остановить это поведение. Минимальный размер пула, равный 0, остановит автоматическое создание новых соединений.
Здесь вы можете найти хороший объяснение о методе ClearAllPools();
.
Итак, наконец, ответ на ваш вопрос. Установите MinPoolSize=0
и после этого вызовите connection.ClearAllPools();
. Это должно работать.
person
Sebi
schedule
06.01.2017