降低QtWebkit内存使用量
原文链接 http://chaosky.me/2014/11/05/QtWebKit-decrease-memory/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
在QtWebkit的QWebView加载网页的时候,会随着每加载一次网页内存就会增加。为解决这个问题可以通过以下代码解决。
QWebSettings::globalSettings()->setAttribute(QWebSettings::AutoLoadImages, false);
QWebSettings::globalSettings()->setMaximumPagesInCache(0);
QWebSettings::globalSettings()->setObjectCacheCapacities(0, 0, 0);
QWebSettings::globalSettings()->setOfflineStorageDefaultQuota(0);
QWebSettings::globalSettings()->setOfflineWebApplicationCacheQuota(0);
QWebSettings::globalSettings()->clearIconDatabase();
QWebSettings::globalSettings()->clearMemoryCaches();
其中
QWebSettings::globalSettings()->clearIconDatabase();
QWebSettings::globalSettings()->clearMemoryCaches();
可以在下一次加载开始前调用,每次调用后会将上一次加载过的页面内存清空。
详细解析
void QWebSettings::setMaximumPagesInCache(int pages)
设置在内存中缓存的最大页数为pages
。缓存页可以在浏览历史页面的时候提供更好的用户体验。
详细介绍参考:http://webkit.org/blog/427/webkit-page-cache-i-the-basics/void QWebSettings::setObjectCacheCapacities(int cacheMinDeadCapacity, int cacheMaxDead, int totalCapacity)
指定已死对象的内存容大小。已死包括stylesheets和scripts。
cacheMinDeadCapacity
指定当缓存在压力下,已死对象消耗的最小字节数。
cacheMaxDead
是当缓存没在压力下,已死对象应该消耗的最大字节数。
totalCapacity
指定缓存全部消耗的最大字节数。
缓存默认是开启的。通过setObjectCacheCapacities(0, 0, 0)
来禁用缓存。设置非零来开启。void QWebSettings::setOfflineStorageDefaultQuota(qint64 maximumSize)
设置新的离线存储数据库的默认最大值为maximumSize
。void QWebSettings::setOfflineWebApplicationCacheQuota(qint64 maximumSize)
设置离线web应用的缓存最大值为maximumSize
。void QWebSettings::clearIconDatabase()
清除图标数据库。void QWebSettings::clearMemoryCaches()
通过JavaScript垃圾回收器和清空比如页面、对象和字体等缓存,尽可能多地释放内存。
Webkit Page Cache机制
https://www.webkit.org/blog/427/webkit-page-cache-i-the-basics/
https://trac.webkit.org/wiki/MemoryCache
参考链接
http://qt-project.org/forums/viewthread/11105
http://webkit.sed.hu/content/disabling-cache