検討:
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 に増加します。コードにメモリ リークが存在するようです。しかし、すべてのオブジェクトが削除されているようです。どうしてこれなの?