Skip to content

DomCrawler memory leak with filter method #10879

Closed
@fliespl

Description

@fliespl

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";

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions