|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.10.2008, 00:41 | #1 |
Delphi Master
Форумчанин Подтвердите свой е-майл
Регистрация: 31.03.2008
Сообщений: 803
|
Как ускорить загрузку списка ListBox из txt-файла?
У меня на главной форме 5 компонентов ListBox. В каждый из них загружаются данные из txt-файлов объемом по 1 Мб. Способ загрузки обычный
listbox1.Items.LoadFromFile('file.t xt'); Дело в том, что процесс загрузки занимает около 12 секунд. Есть ли возможность ускорить этот процесс? |
29.10.2008, 01:11 | #2 |
Участник клуба
Регистрация: 30.04.2007
Сообщений: 1,307
|
Хм... я бы предложил сделать этот процесс через потоки.
по одному на каждый листбокс, приоритет главного процесса установить высокий, а для потоков выше среднего.
Всё гениальное - просто!
|
29.10.2008, 01:16 | #3 |
Delphi Master
Форумчанин Подтвердите свой е-майл
Регистрация: 31.03.2008
Сообщений: 803
|
Спасибо за наводку, Air, однако с потоками до этого не работал, может подбросите примерчик?
|
29.10.2008, 01:22 | #4 |
Участник клуба
Регистрация: 30.04.2007
Сообщений: 1,307
|
Вот нашёл.
http://www.programmersforum.ru/showt...EE%F2%EE%EA%E8 http://www.programmersforum.ru/showt...EE%F2%EE%EA%E8 http://www.programmersforum.ru/showt...EE%F2%EE%EA%E8 http://www.programmersforum.ru/showt...EE%F2%EE%EA%E8 http://www.programmersforum.ru/showt...EE%F2%EE%EA%E8 http://www.programmersforum.ru/showt...EE%F2%EE%EA%E8 http://www.programmersforum.ru/showt...EE%F2%EE%EA%E8 http://www.programmersforum.ru/showt...EE%F2%EE%EA%E8 http://www.programmersforum.ru/showt...EE%F2%EE%EA%E8 http://www.programmersforum.ru/showt...EE%F2%EE%EA%E8 http://www.programmersforum.ru/showt...EE%F2%EE%EA%E8 http://www.programmersforum.ru/showt...EE%F2%EE%EA%E8 Каждая тема чем-то полезная. В частности Вам нужен класс TThread Создать поток (в delphi) можно так File - new - other - theread object вводите имя класса и готово. Не забудьте в Код:
и создать переменную этого типа для управления Код:
Код:
TThreadPriority = (tpIdle, tpLowest, tpLower, tpNormal, tpHigher, tpHighest, tpTimeCritical); tpIdle, tpLowest, tpLower, tpNormal, tpHigher, tpHighest, tpTimeCritical - в порядке увеличения ____ в архиве пример... должен быть, взял из ресурса delphi ___ Вот ещё примерчик, как изменить приоритет главного процесса Важно! что бы не было похожего имени процесса в системе. Код:
Всё гениальное - просто!
Последний раз редактировалось Air; 29.10.2008 в 02:02. |
29.10.2008, 01:36 | #5 |
Delphi Master
Форумчанин Подтвердите свой е-майл
Регистрация: 31.03.2008
Сообщений: 803
|
Спасибо, просмотрел... но пока не въезжаю.. надо будет более детально разобраться с потоками.
|
29.10.2008, 16:32 | #6 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
А насколько реально потоки увеличат производительность? Ведь если процессор уже занят на 100%, все равно в очередь пойдет.
Нужно помимо потоков еще и саму загрузку оптимизировать. LoadFromFile это не самый быстрый способ, тем более в визуальный компонент.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
29.10.2008, 16:37 | #7 |
Участник клуба
Регистрация: 30.04.2007
Сообщений: 1,307
|
mutabor никто не говорил что проц загружен на 100%
И я же сказал что "я бы предложил сделать..." я не говорю что это единственный способ, просто форма не будет тормозить при загрузке листбоксов. ___ А может на время загрузки вообще св-во Visible в false перевести? Ведь тогда прорисовывать строчки в листбоксе не придётся, а когда подгрузка завершится можно вернуть в true.
Всё гениальное - просто!
|
29.10.2008, 17:29 | #8 | |||
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
Цитата:
Я пробовал как-то в Memo ускорить вывод, мне из StringList нужно было выводить на экран, так способ Text:=Text в два раза быстрее других. Попробовал в ListBox, с ним этот номер не проходит, то же время. На загрузку из файла 1МБ уходит не более 20мс, а на отображение 1500. Цитата:
Dux, если не выйдет ускорить, сделай прогресс бар, короче окультурь это дело.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 29.10.2008 в 17:38. |
|||
29.10.2008, 18:49 | #9 |
Delphi Master
Форумчанин Подтвердите свой е-майл
Регистрация: 31.03.2008
Сообщений: 803
|
Перепробовал уже все что можно, visible и так стоит в false у всех листобоксов, есть прогресс бар, использую Apllication.Processmessages, и beginupdate, endupdate и со всем этим загрузка около 12 сек. Это электронный словарь и количество слов постоянно пополняется, поэтому и ищу способ ускорить загрузку в listbox.
|
29.10.2008, 20:56 | #10 |
Участник клуба
Регистрация: 30.04.2007
Сообщений: 1,307
|
Хм...
Электронный словарь.... Тогда не обойтись без загрузки БД, значит делаем форму и на ней располагаем прогрессбар, св-ва BorderStyle:=bsNone BorderIcons:=[] // т.е пустым (или параметры выставляем в false) получим форму без кнопок управления. Написать "Загрузка БД, подождите..." (и прогрессбар будет отображать состояние готовности) Как загрузка завершится, отобразить форму, а эту (с прогрессбаром), спрятать Form1.Hide (к примеру). __ Во всяком случае сделаем видимость нормальной подгрузки, а не видимость подвисания программы. всё же с потоками чуть лучше, потому что, если освободится ресурс CPU, то загрузка в любом случае пойдёт быстрее, конечно если CPU слабоват, да и ОЗУ маловато... (128-512), то ничего не поделаешь. ________ mutabor, а что если задействовать AssignFile и подгружать построчно?.. - в бесконечном цикле, без задержки типа Sleep(1). Обычно загрузка CPU на 50%, за то КПД выше. Или TFileStream задействовать... ____ Dux в каком формате Ваша БД (те файлы что грузите в листбокс)?
Всё гениальное - просто!
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не открывает из списка файлов ListBox | SANTA_KLAUD | Общие вопросы Delphi | 8 | 27.05.2008 20:30 |
Как ускорить загрузку битмапа в tImage | Altera | Мультимедиа в Delphi | 10 | 24.03.2008 17:39 |
Как прочесть txt файл www.site.ru/info.txt | BR17UY | Работа с сетью в Delphi | 1 | 16.04.2007 13:01 |
как считать данные с Txt файла? | Alar | Общие вопросы Delphi | 0 | 29.10.2006 20:12 |