[dibi] Při volání fetch() v cyklu se spotřebuje celá paměť

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

Ahoj,

mám cyklus, ve kterém stahuji data z databáze. Problém je v tom, že s každým dotazem roste množství využité paměti.

public function actionTest(\DibiConnection $database)
    {
        for ($i = 0; $i < 5000; $i++) {
            echo $i . PHP_EOL;
            $memory = memory_get_usage(true);
            echo $memory / 1000000 . PHP_EOL;
            $foo = $database->select('*')->from('table')->where('id = %i', 1)->fetch();
            echo '+' . (memory_get_usage(true) - $memory) / 1000000 . PHP_EOL;
        }
        exit();
    }

Čím by to mohlo být? Resp. proč se paměť neuvolňuje?

Děkuji

Editoval raketoplan2005 (8. 6. 2015 17:57)

David Klouček
Člen | 57
+
0
-

Proč posíláš 5000 dotazů a nepoužiješ WHERE id IN (..)?

David Matějka
Moderator | 6445
+
0
-

Nemas zapnuty tracy bar?

raketoplan2005
Člen | 147
+
0
-

Je to CLI s vypnutým debug modem.

raketoplan2005
Člen | 147
+
0
-

@DavidKlouček: To co je výše je modelový příklad. Typicky potřebuji s danou entitou ještě nějak pracovat a zatímco po jedné by se mi do paměti vejít měly (pokud by se uvolňovala), všechny najednou ne.

Jan Tvrdík
Nette guru | 2595
+
0
-

Zkusil bych nepoužívat DibiFluent.

Jan Tvrdík
Nette guru | 2595
+
0
-

Co používaš za driver?

raketoplan2005
Člen | 147
+
0
-

Chová se to bohužel stejně i s query() i s voláním free() po query().

raketoplan2005
Člen | 147
+
0
-

@JanTvrdík: Zkoušeno s mysql, mysqli a pdo. Vše se chová stejně.

raketoplan2005
Člen | 147
+
+1
-

Omlouvám se – vyřešeno díky @Milo na dibi foru – zapomněl jsem na profiler.

raketoplan2005
Člen | 147
+
0
-

Tak to nakonect bylo zapomenutým zapnutým profilerem v dibi, děkuji.

raketoplan2005
Člen | 147
+
0
-

Děkuji za pomoc, vyřešeno – zapomenutý profiler na true.