Autor | Zpráva | ||
---|---|---|---|
maarlin Profil |
#1 · Zasláno: 1. 4. 2010, 21:01:53
Zdravím,
řeším dost palčivý problém - potřebuji parsovat nevalidní HTML a snažím se jít asi nejsnažší cestou - rozhodnul jsem se použít připravený Simple HTML DOM. Pochopil jsem, že funguje na podobném principu, jako SimpleXML - tzn. nahraje celý strom do paměti a pak se v něm hledá. Problém spíše je v tom, že po nahrání a zavolání čistící metody ->clear(), která by tam právě měla být k zabránění toho memory leaku, se prakticky nic nevyčistí a pamět zůstane zanesená. Nejvíce se to právě začne projevovat a extrémně vadit, když se dotazuje více, než jedna URL v jednom scriptu, protože každá vytvořená instance té třídy za sebou zanechá bordel v paměti. Abych to shrnul, třída se chová tak, že uvnitř sebe zaregistruje evidentně do paměti nějaká data, která už se neuvolní. function formatKB($number) { return number_format (($number/1024), 2, ',', ' ').' KiB'; } include ('simple_html_dom.php'); echo 'Before: '.formatKB(memory_get_usage(TRUE)).'<br />'; $html = file_get_html('http://www.google.com/'); $html->clear(); echo 'After: '.formatKB(memory_get_usage(TRUE)).'<br />'; Výstupem (jak můžete sami otestovat) bude před zavoláním file_get_html() 512KiB a po zavolání 1024KiB. Neřešil jste to někdy někdo? Nevíte jak by se to dalo řešit? Už jsem z toho celkem zoufalý... :( |
||
maarlin Profil |
#2 · Zasláno: 2. 4. 2010, 09:19:48 · Upravil/a: maarlin
Kdyby se to někomu hodilo:
Nakonec jsem našel využití v jakési nadstavbě nad DOMDocument - knihovna QueryPath. Knihovnu jsem jemně poupravil, aby dokázala zchroustat i nevalidní dokumenty a nyní je zcela použitelná... :) Už žádné memory leaks... |
||
Časová prodleva: 15 let
|
0