mapt34
Новичок
Скрипт занимается синхронизацией 2х баз.
В процессе работы столкнулись с тем, что он не укладывается в лимиты по памяти.
Решено было чистить память по мере исполнения, но неожиданно натолкнулись на проблемы с высвобождением памяти postgresql.
Код такой:
В итоге получаем такую вот фигню:
15килобайт. Т.к. запросов выполняется порядка нескольких сот тысяч, получаем перерасход памяти.
Вопрос: что не так в коде, как этого избежать?
Очень не хочется писать пошаговый алгоритм, надеемся на помощь в поиске решения.
В процессе работы столкнулись с тем, что он не укладывается в лимиты по памяти.
Решено было чистить память по мере исполнения, но неожиданно натолкнулись на проблемы с высвобождением памяти postgresql.
Код такой:
PHP:
class MPGDataBase {
public function Query($sql) {
return pg_query($this->conn,$sql);
}
public function Select($sql) {
return new MPGSelectResult($this,$sql);
}
}
class MPGSelectResult {
public function __construct($db,$sql) {
$this->result = $db->Query($sql);
}
public function __destruct() {
pg_free_result($this->result);
unset($this->result);
}
}
function memoryUsage($usage, $base_memory_usage) {
printf("Bytes diff: %d\n", $usage - $base_memory_usage);
}
$base_memory_usage = memory_get_usage();
memoryUsage(memory_get_usage(), $base_memory_usage);
echo "select users\n";
$obUsers = $DB->Select("SELECT * FROM users WHERE \"Agency\" IS NULL AND \"Active\"=true");
memoryUsage(memory_get_usage(), $base_memory_usage);
echo "unset obUsers\n";
unset($obUsers);
memoryUsage(memory_get_usage(), $base_memory_usage);
PHP:
Bytes diff: 92
select users
Bytes diff: 16148
unset obUsers
Bytes diff: 15792
Вопрос: что не так в коде, как этого избежать?
Очень не хочется писать пошаговый алгоритм, надеемся на помощь в поиске решения.