| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Загрузка большого файла в QStringList |
| Автор: Matematik 25.5.2009, 11:08 | ||||||
| Как быстро загрузить файл в QStringList? Пробую на файле 50мб с 2'500'000 (два миллиона с половинкой) строк
Жму кнопку первый раз - 5сек, второй - 10сек. Почему-то получается дольше. И еще, после закрытия QMessageBox::information() MainWindow зависает на полсекунды. Что делаю не так? Qt только начал изучать и само собой сравниваю с Delphi, который неплохо знаю. Например в Delphi таким же методом добавления
Обрабатывает стабильно 2сек без скачков в стороны. Если делать встроенным методом TStringList.LoadFromFile() - грузит чуть меньше секунды
|
| Автор: SABROG 25.5.2009, 13:58 |
| Лучше используй QTextStream. Кстати TStringList вылетает с исключением гораздо раньше, чем успевает закончится память. |
| Автор: andrew_121 26.5.2009, 14:20 |
| Matematik, Не понятно почему с каждым кликом дольше. QStringList - это QList<QString>. Добавляет он быстро. Поэкспериментируй с QVector<QString>. Но векторы плохо подходят для частого изменения размера. По этому, подумай как ты можешь задать ему размер до загрузки. Добавлено через 58 секунд Не соглашусь. Экспериментально установил что он работает тяжелее. |
| Автор: just_geek 26.5.2009, 16:20 |
| А зачем часто менять размер QVector ? сделать reserve равный размеру файла и усе... А текущее решение вообще какое-то не оптимальное, имхо. Будет дикая фрагментация памяти. |
| Автор: just_geek 26.5.2009, 20:53 | ||
ой, ну я гоню Проще помойму загнать все в один массив, а потом только сохранить указатели на строки и все. |
| Автор: SABROG 26.5.2009, 21:53 |
| В принципе не мудрено почему медленно, Qt каждую строку в юникод переводит. |
| Автор: andrew_121 27.5.2009, 01:45 | ||
Гы |