Nette\Database a uvolňování paměti

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
tomas.lang
Člen | 53
+
0
-

Zdravím,

používám PHP ve verzi PHP 5.3.13 a Nette v poslední verzi z https://github.com/…its/f-db-dev.

Problém je s uvolňováním paměti po volání dotazů na DB, konkrétně:

<?php
memory_get_usage(true); // 10MB
$sql = $this->database->table('some_table')->limit(10000);
foreach ($sql as $row)
{
	$a[$row->col_a] = $row->col_b;
} // foreach pouzit oproti ->fetchPairs kvuli testovacim ucelum

memory_get_usage(true); // 30MB

$a   = null;
$sql = null;

memory_get_usage(true); // 30 MB

?>

Při dumpování Nette\Database\Connection jsem si všiml, že volané dotazy se tam logují, a to i přesto že jsem se pokusil logování vypnout (v config.neon u nette:database:database nastaveno debugger: false).

Skript běží v CLI prostředí – jedná se o import, kdy potřebuji držet v paměti některá data přednačtené – ale hlavně je po využití uvolňovat.

Je zde nějaká možnost jak uvolňovat data na straně Nette\Database\Connection které jsem si nevšiml? Jak toto případně řešíte?

tomas.lang
Člen | 53
+
0
-

Četl, četl – tvoje úprava mi bohužel moc nepomohla, takže jsem čekal že mi pomůžou ty úpravy na větvi f-db-dev, ale ani tady se nic nekonalo, tak jsem napsal napsal…

Jinak chápu tedy dobře, že jde primárně o chybu v PHP a nepohnu s tím? (tedy kromě nepoužívání PDO)

hrach
Člen | 1834
+
0
-

f-db-dev prave resi HosipLan-uv problem, mam ale jeste tyden dovolenou, takze budu resit az pak :]

jtousek
Člen | 951
+
0
-

@tomas.lang: Problém to těžko vyřeší, ale nechybí tam $row = null;?