Russian Qt Forum
Ноябрь 01, 2024, 06:27
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
QWebView кэширование на диск
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QWebView кэширование на диск (Прочитано 5295 раз)
PinkPanther
Самовар
Offline
Сообщений: 169
QWebView кэширование на диск
«
:
Март 02, 2015, 16:45 »
Здравствуйте.
Подскажите пожалуйста, как заставить QWebView хранить кэш загруженных страниц на диске, а не в памяти?
За пару часов прога съедает до 600 мегабайт оперативки. К тому же, после выключения кэш пропадает, а хотелось бы его сохранить. То есть нужно, чтобы весь кэш сохранялся не в памяти, а на диске. А память под кэш QWebView либо вообще не использовалась, либо по минимуму.
«
Последнее редактирование: Март 02, 2015, 16:47 от PinkPanther
»
Записан
Эвтаназия - наше хобби!
torwig
Самовар
Offline
Сообщений: 134
Re: QWebView кэширование на диск
«
Ответ #1 :
Март 02, 2015, 17:42 »
Я этим не занимался, но вот посмотрел первую ссылку в гугле (
http://www.qtcentre.org/threads/24354-using-QWebView-cache-with-QNetworkDiskCache
), там устанавливают QNetworkDiskCache для объекта QNetworkAccessManager, который обслуживает QWebView (ui->webView->page()->networkAccessManager()).
Записан
PinkPanther
Самовар
Offline
Сообщений: 169
Re: QWebView кэширование на диск
«
Ответ #2 :
Март 02, 2015, 18:13 »
Цитата: torwig от Март 02, 2015, 17:42
Я этим не занимался, но вот посмотрел первую ссылку в гугле (
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
)
Записан
Эвтаназия - наше хобби!
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: QWebView кэширование на диск
«
Ответ #3 :
Март 02, 2015, 18:38 »
Причиной может быть банальная утечка памяти в твоём коде - неудаляемые объекты и т.д.
Если
код 100% чист, то нужно сперва сократить количество страниц в памяти через
http://doc-snapshot.qt-project.org/qt5-5.4/qwebsettings.html#setMaximumPagesInCache
, например, до одной.
Записан
PinkPanther
Самовар
Offline
Сообщений: 169
Re: QWebView кэширование на диск
«
Ответ #4 :
Март 02, 2015, 19:03 »
Цитата: Alex Custov от Март 02, 2015, 18:38
Причиной может быть банальная утечка памяти в твоём коде - неудаляемые объекты и т.д.
Если
код 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).
Записан
Эвтаназия - наше хобби!
PinkPanther
Самовар
Offline
Сообщений: 169
Re: QWebView кэширование на диск
«
Ответ #5 :
Март 07, 2015, 10:42 »
Не могу сказать, что проблема решена кардинально, но подключение дискового кэша (к QNetworkAccessManager и QWebView) несколько улучшило ситуацию.
Еще немного улучшила ситуацию функция setObjectCacheCapacities(int minimal, int maximal, int overal) объекта QWebSettings.
С помощью нее можно указать, какое количество ненужного барахла, загруженного ранее, можно позволить себе хранить в памяти.
В результате всех ухищрений приложение (параллельно работает 6 экземпляров) стало раздуваться не до 450 мегабайт за день работы, а до 200-250.
Если у кого-то есть идеи, как кардинально пресечь утечку памяти при работе QWebView, поделитесь пожалуйста.
Записан
Эвтаназия - наше хобби!
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...