Название: QWebView кэширование на диск Отправлено: PinkPanther от Март 02, 2015, 16:45 Здравствуйте.
Подскажите пожалуйста, как заставить QWebView хранить кэш загруженных страниц на диске, а не в памяти? За пару часов прога съедает до 600 мегабайт оперативки. К тому же, после выключения кэш пропадает, а хотелось бы его сохранить. То есть нужно, чтобы весь кэш сохранялся не в памяти, а на диске. А память под кэш QWebView либо вообще не использовалась, либо по минимуму. Название: Re: QWebView кэширование на диск Отправлено: torwig от Март 02, 2015, 17:42 Я этим не занимался, но вот посмотрел первую ссылку в гугле (http://www.qtcentre.org/threads/24354-using-QWebView-cache-with-QNetworkDiskCache), там устанавливают QNetworkDiskCache для объекта QNetworkAccessManager, который обслуживает QWebView (ui->webView->page()->networkAccessManager()).
Название: Re: QWebView кэширование на диск Отправлено: PinkPanther от Март 02, 2015, 18:13 Я этим не занимался, но вот посмотрел первую ссылку в гугле (http://www.qtcentre.org/threads/24354-using-QWebView-cache-with-QNetworkDiskCache), там устанавливают QNetworkDiskCache для объекта QNetworkAccessManager, который обслуживает QWebView (ui->webView->page()->networkAccessManager()). Спасибо, интересно. Там вроде некоторые пишут, что при подключении кэша через менеджер QWebView начинает показывать битые страницы. На самом деле, в QWebView имеется класс QWebSettings, а там - серия настроек, под HTML5 и т.д. Можно указать путь, где хранить страницы, квоту и т.д. Но там явно больше, чем нужно мне, а т.к. в сетевых технологиях пока не силен, подключил все, что нашел. Но приложения все равно раздуваются с каждой загруженной браузером страницей. Говорят, это баг QWebView (http://www.qtcentre.org/threads/18853-Bad-memory-usage-on-QWebView-I-think?highlight=QWebView+Cache) Название: Re: QWebView кэширование на диск Отправлено: Alex Custov от Март 02, 2015, 18:38 Причиной может быть банальная утечка памяти в твоём коде - неудаляемые объекты и т.д. Если код 100% чист, то нужно сперва сократить количество страниц в памяти через http://doc-snapshot.qt-project.org/qt5-5.4/qwebsettings.html#setMaximumPagesInCache , например, до одной.
Название: Re: QWebView кэширование на диск Отправлено: PinkPanther от Март 02, 2015, 19:03 Причиной может быть банальная утечка памяти в твоём коде - неудаляемые объекты и т.д. Если код 100% чист, то нужно сперва сократить количество страниц в памяти через http://doc-snapshot.qt-project.org/qt5-5.4/qwebsettings.html#setMaximumPagesInCache , например, до одной. Код, скорее всего, чист - объекты создаются как свойства основного класса, и используются до конца работы приложения. Ну и локальные переменные в функциях, в стэке. По поводу setMaximumPagesInCache(), сначала ставил значение 200, сейчас сократил до 50. Дело в том, что кэш, сам по себе, нужен (я нахожусь в стране, где интернет не очень быстрый). Если выключаю кэш (или принудительно чищу перед каждой перезагрузкой), время загрузки страницы вырастает в 2-3 раза, и это видно на глаз. Если бы можно было перенести кэш на диск, то на диске пусть кэширует хоть 10,000 страниц. Не жалко. Но нужна уверенность, что приложение будет им реально пользоваться. За час автономной работы (скрипт загрузил 250 страниц, из них ~50 уникальные) приложение, с включенным оффлайн-кэшированием, захватило 80 мегабайт оперативки (на старте занимало 120, сейчас 200). Название: Re: QWebView кэширование на диск Отправлено: PinkPanther от Март 07, 2015, 10:42 Не могу сказать, что проблема решена кардинально, но подключение дискового кэша (к QNetworkAccessManager и QWebView) несколько улучшило ситуацию.
Еще немного улучшила ситуацию функция setObjectCacheCapacities(int minimal, int maximal, int overal) объекта QWebSettings. С помощью нее можно указать, какое количество ненужного барахла, загруженного ранее, можно позволить себе хранить в памяти. В результате всех ухищрений приложение (параллельно работает 6 экземпляров) стало раздуваться не до 450 мегабайт за день работы, а до 200-250. Если у кого-то есть идеи, как кардинально пресечь утечку памяти при работе QWebView, поделитесь пожалуйста. |