2

検討:

    QString urls[] = {
        QString("http://www.sina.com")
    };
    int len = 1;
    QWebSettings::setMaximumPagesInCache(0);
    QEventLoop loop;
    for (int i = 0; i < 200000; i++) {
        QWebPage *page = new QWebPage;
        page->settings()->setAttribute(
                    QWebSettings::AutoLoadImages,
                    false);
        page->settings()->setAttribute(
                    QWebSettings::PrintElementBackgrounds,
                    false);
        page->settings()->setAttribute(
                    QWebSettings::JavascriptEnabled,
                    false);
        QString url = urls[i % len];
        cout << "requesting " << url.toStdString() << endl;
        connect(page, SIGNAL(loadFinished(bool)),
                &loop, SLOT(quit()));
        page->mainFrame()->load(url);
        loop.exec();
        disconnect(page, 0, 0, 0);
        QWebSettings::clearMemoryCaches();
        page->settings()->clearMemoryCaches();
        connect(page, SIGNAL(destroyed()),
                &loop, SLOT(quit()));
        printLog(page->mainFrame()->toHtml());
        page->deleteLater();
        loop.exec();
    }

このテストを実行すると、メモリが約 40 MB から約 700 MB に増加します。コードにメモリ リークが存在するようです。しかし、すべてのオブジェクトが削除されているようです。どうしてこれなの?

4

2 に答える 2