Closed
Description
Hi,
recently I have noticed that DomCrawler might leak memory while using filter method (in contrary to filterXpath method).
Here's an example memory usage for both methods (after 100 loops):
Before $crawler->filterXPath("//tr/td"): 9175040
elements:800
After $crawler->filterXPath("//tr/td"): 9175040
Before $crawler->filter("tr > td"): 9175040
elements:800
After $crawler->filter("tr > td"): 12320768
Example code for both methods:
$html = '<tr><td>abc</td><td>dce</td><td>abc</td><td>dce</td><td>abc</td><td>dce</td><td>abc</td><td>dce</td><tr>';
$elements = 0;
print 'Before $crawler->filterXPath("//tr/td"): ' . memory_get_usage(true) . "\n";
for ($i = 0; $i < 100; $i++) {
$crawler = new Crawler($html);
$columns = $crawler->filterXPath('//tr/td');
$elements += sizeof($columns);
$columns->clear();
$crawler->clear();
}
print "elements:" . $elements . "\n";
print 'After $crawler->filterXPath("//tr/td"): ' . memory_get_usage(true) . "\n";
print "\n\n";
$elements = 0;
print 'Before $crawler->filter("tr > td"): ' . memory_get_usage(true) . "\n";
for ($i = 0; $i < 100; $i++) {
$crawler = new Crawler($html);
$columns = $crawler->filter('tr > td');
$elements += sizeof($columns);
$columns->clear();
$crawler->clear();
}
print "elements:" . $elements . "\n";
print 'After $crawler->filter("tr > td"): ' . memory_get_usage(true) . "\n";