![]() |
|
![]() ![]() ![]() |
|
Matematik |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: нет Всего: 50 |
Как быстро загрузить файл в QStringList?
Пробую на файле 50мб с 2'500'000 (два миллиона с половинкой) строк
Жму кнопку первый раз - 5сек, второй - 10сек. Почему-то получается дольше. И еще, после закрытия QMessageBox::information() MainWindow зависает на полсекунды. Что делаю не так? Qt только начал изучать и само собой сравниваю с Delphi, который неплохо знаю. Например в Delphi таким же методом добавления
Обрабатывает стабильно 2сек без скачков в стороны. Если делать встроенным методом TStringList.LoadFromFile() - грузит чуть меньше секунды
|
||||||
|
|||||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Лучше используй QTextStream.
Кстати TStringList вылетает с исключением гораздо раньше, чем успевает закончится память. Это сообщение отредактировал(а) SABROG - 25.5.2009, 14:02 |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 11 Всего: 33 |
Matematik, Не понятно почему с каждым кликом дольше.
QStringList - это QList<QString>. Добавляет он быстро. Поэкспериментируй с QVector<QString>. Но векторы плохо подходят для частого изменения размера. По этому, подумай как ты можешь задать ему размер до загрузки. Добавлено через 58 секунд Не соглашусь. Экспериментально установил что он работает тяжелее. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
just_geek |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 13.12.2007 Репутация: 7 Всего: 10 |
А зачем часто менять размер QVector ? сделать reserve равный размеру файла и усе...
А текущее решение вообще какое-то не оптимальное, имхо. Будет дикая фрагментация памяти. |
|||
|
||||
andrew_121 |
|
||||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 11 Всего: 33 |
just_geek, А я разве об этом не упомянул? ![]()
Это уже другой вопрос. Добавлено через 51 секунду А вот с этого места по подробней плиз... -------------------- Удалил аккаунт. Прощайте! |
||||
|
|||||
just_geek |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 13.12.2007 Репутация: 7 Всего: 10 |
ой, ну я гоню ![]() Проще помойму загнать все в один массив, а потом только сохранить указатели на строки и все. |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
В принципе не мудрено почему медленно, Qt каждую строку в юникод переводит.
|
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 11 Всего: 33 |
Гы ![]() ![]() -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |