|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Как ускорить загрузку списка ListBox из txt-файла?
У меня на главной форме 5 компонентов ListBox. В каждый из них загружаются данные из txt-файлов объемом по 1 Мб. Способ загрузки обычный
listbox1.Items.LoadFromFile('file.txt'); Дело в том, что процесс загрузки занимает около 12 секунд. Есть ли возможность ускорить этот процесс? Delphicode.org - справочник Delphi |
#2
|
||||
|
||||
Что-то долго 12 секунд на 5 мегабайт, проблема видимо не в загрузке.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
|||
|
|||
есть идея перед загрузкой вызывать lisbox1.items.BeginUpdate, а после естественно lisbox1.items.EndUpdate... быстрее намного получаеться при построчном щаполнении, может и тебе подойдет...
правильный вопрос содержит в себе 90% ответа |
#4
|
||||
|
||||
Цитата:
Да нет, именно в ней. попробуйте загрузить в листбокс текстовый файл с 50000 строк и посмотрите сколько времени на это уйдет.. Delphicode.org - справочник Delphi |
#5
|
||||
|
||||
Цитата:
Это я уже использую, но заметно не ускоряет, может на 1 сек Delphicode.org - справочник Delphi |
#6
|
||||
|
||||
А че ты туда насовал
Кнопка "+" - весы в правом верхнем углу сообщения... |
#7
|
||||
|
||||
Цитата:
это электронный словарь Delphicode.org - справочник Delphi |
#8
|
|||
|
|||
Уважаемый, Dux, если вы внимательно посмотрите в исходниках как происходит загрузка строк из текстового файла в ListBox, то будете неприятно удивлены.
Каждая строка добавляется через метод Add в цикле. А что такое циклы в Delphi очень даже известно. Никаким способом (ну, может быть, кроме приобретения суперкомпа ) ускорить загрузку 50000 строк не получится. Судя по вашим 12-ти секундам у вас еще очень шустрый компьютер. Так же, не очень понятно как бедный пользователь будет справлятся с 50-тью тысячими строк в ListBox'е (если, конечно, эти мегабайты предназначены для ручной манипуляции с ними). Дать рекомендации по вашей задаче возможно, только тогда, когда станет ясна задача для чего необходимо держать в памяти 5 Мб информации. А может быть, так нагружать память и не требуется? В любом случае, если очень хочется загрузить такое количество информации придется применять изощренные методы. Например, использовать Thread'ы. Предположительно, несколько должно помочь. Хотя я бы держал эти мегабайты в базе. Выборка нужных строк в SQL базах происходит очень быстро. Не забывайте делать резервные копии |
#9
|
||||
|
||||
Переделывать уже поздно.. приходиться пользоваться listbox. Поиск происходит в режиме online, поэтому приходится все держать в памяти.
Delphicode.org - справочник Delphi |
#10
|
|||
|
|||
Попробуйте применить Thread'ы при загрузке. На каждый ListBox своя "нить". Или тоже поздно? Тогда, облом.
Не забывайте делать резервные копии |
#11
|
|||
|
|||
Цитата:
ВСё просто Application.ProcessMessages в цикле пиши и будет счастье на твой дом. Это при строчной загрузке. Улёттттттттттттт!!!! |
#12
|
|||
|
|||
А если попробовать сначало загрузить данные в поток, а потом в листбооксе из потока загрузку сделать?
Delphi - это лишь инструмент, а что ты сможешь создать при помощи этого инструмента, зависит исключительно от тебя. |
#13
|
|||
|
|||
LoadFromFile в целом и так поток. Если частями, то с тем что я сказал соединить и попробовать
Улёттттттттттттт!!!! |
#14
|
|||
|
|||
Application.ProcessMessages
Вобще тормозит цикл Delphi - это лишь инструмент, а что ты сможешь создать при помощи этого инструмента, зависит исключительно от тебя. |
#15
|
|||
|
|||
Правильно зато разрешает работать с окном.
А нам это и надо. К тому же тормоза пооОчти не заметны Улёттттттттттттт!!!! |