| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] Проблема с открытием большого HTML файла |
| Автор: mosg 16.11.2008, 13:22 | ||
| Добрый день! Проблема в следующем: есть html-файл с размером 6Mb, структура которого представляет из себя записи в виде (ссылка|пояснение) и т.д. на 50 тыс. строк ... Так вот не могу открыть этот документ в QTextDocument или QTextEdit! :( Точнее сказать - прога подвисает на целую эпоху, что не допустимо, и требуется время хотя бы 10-15 секунда на открытие этого документа. Понимаю что многое зависит от железа и загрузки машины, но дельфевые варианты открываются на этой же машине с тем же железом за доступные 10-15 секунд. Как вариант рассматриваю дополнение html-строк в виджет, но как реализовать пока не представляю. Пробую вот так:
Может быть кто сталкивался с такой проблемой? Заранее спасибо за советы! |
| Автор: SABROG 16.11.2008, 13:59 |
| Попробуй метод setMaximumBlockCount(). Не уверен, что поможет и, возможно, где-то в другом месте начнет притормаживать, но тролли советуют использовать его для отображения логов, которые обычно бывают довольно большими. Сам не пробывал, поэтому не знаю будет ли возможен скроллинг. Как воторой и третий вариант можно посмотреть в сторону QTextBrowser и QWebKit, если не требуется редактирование. И скорее всего бесполезные советы: - setUpdatesEnabled(false); bigVisualChanges(); setUpdatesEnabled(true); - QTextCursor::beginEditBlock(); //вставка текста QTextCursor::endEditBlock(); |
| Автор: mosg 16.11.2008, 14:45 | ||
Да, начал крутить с этим модулем, но результаты пока не оченб внушительные, вместо 10-12 секунд, код:
Крепко подвисает на ~ 1 минуту 45 секунд, т.е. работает в 7! раз медленнее :( Хотя конечно надо ещё покопаться и найти информацию по оптимизации вызова webView->load(), т.к. в демо-примерах "Demonstration"|"Browser" тот же файл грузится около 30 секунд, что немного радует. Да и варианты setUpdatesEnabled и подобных тут точно не канают. Все равно спасибо за советы. Если найду максимально быстрый путь загрузки, код кину сюда обязательно. |
| Автор: SABROG 16.11.2008, 15:06 | ||||||
| Вот еще что подумал. Дебаг версия обычно медленнее чем Релиз. Какую тестируешь ? Попробуй подключить код профайлера, если используешь gcc. Надо будет добавить это: в .pro файл
Потом запускаешь дебаг версию и ждешь, когда медленный участок кода отработает до конца. Выходишь из программы и ищешь новый файлик gmon.out. Подсовываешь его профайлеру:
И получаешь нечто похожее:
Т.е. тут видно, что дольше всего выполняется цикл из 90 миллионов итерация, на втором месте - конструктор главной формы. Если узнаем где узкое место, то возможно сможем обойти его. |
| Автор: mosg 16.11.2008, 16:31 |
Завтра попробую на работе. Да, я забыл совсем сказать, использую в основном debug. Результаты конечно будут отличаться, но мне почему-то никогда в голову не приходило, что дебаг версия будет в 2.5 раза медленее ... |
| Автор: JackYF 19.11.2008, 15:50 |
Дебаг-версия может быть на порядок/полтора медленнее иногда, так что |
| Автор: ldir 30.4.2013, 09:33 |
| Здравствуйте! Кто нибудь нашел решение? У меня та же проблема. Если кто знает способ побороть, хоть скажите куда глядеть. |
| Автор: Jeka178RUS 30.4.2013, 12:25 |
| Для больших объемов данных сразу напрашивается поток (хотя как помню с гуями есть сложности) или читать по несколько строк, а потом вызывать processEvents руками, тем самым оживляя окно и обновляя progresBar с состоянием загрузки данных. Еще посмотри что тут пишут http://stackoverflow.com/questions/1386043/how-to-make-qt-work-when-main-thread-is-busy |