Я использую Symfony 1.4 для своего веб-приложения, которое использует doctrine 1.2 для подключения к моей базе данных MySQL.У меня есть задача Symfony, которая сначала выбирает некоторые данные, используя запросы доктрины, а затем выполняет очень трудоемкую операцию, не связанную с базой данных (например, бесконечный цикл for), которая не требует подключения к базе данных.Поскольку последняя операция не требует подключения к базе данных, чтобы открыть, мне нужно закрыть подключение к базе данных после выполнения операций с базой данных.Поэтому я попытался с помощью следующего кода закрыть соединение с базой данных.
sfContext::createInstance($configuration);
sfContext::getInstance()->getDatabaseConnection('doctrine')->setAttribute(Doctrine_Core::ATTR_AUTO_FREE_QUERY_OBJECTS, true );
// Do the doctrine queries and fetch data
sfContext::getInstance()->getDatabaseManager()->shutdown();
gc_collect_cycles();
// Do the non-database operation
Пока выполняется операция, не связанная с базой данных, я проверил активные процессы mysql с помощью команды SHOW PROCESSLIST
, работающей на MySQL.Он по-прежнему показывает, что соединение MySQL, созданное приложением Symfony, не закрыто, а находится в состоянии сна.
Есть ли способ окончательно закрыть соединение с базой данных в Symfony.
Примечание. Я обнаружил, что соединение доктрины закрывается, если соединение закрывается до выполнения запросов доктрины.
Это, скорее всего, потому, что Doctrine использует PDO, а PDO необходимосбросьте все ссылки перед закрытием соединения MySQL, иначе соединение будет активным.Но я не знаю, как очистить ссылки на PDO в Doctrine.