Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Приложение очень долго закрывается [D7, XP]


allrussia ©   (2006-12-18 23:01:00) 

есть форма, на ней Listview
если в него добавить хотя бы в 1 колонку несколько тысяч строк
а потом закрыть форму то закрытие происходит очень медленно 10-20-50 секунд в зависимости от кол-ва айтемов
Есть возможность ускорить этот процесс, кроме TerminateProcess?
Я просто не знаю, может как то выделить память перед добавлением элементов?
Спасибо.


allrussia   (2006-12-20 02:03:00) [1]

trubin

Спасибо, по скорости неплохо, выгрузка моментальная


trubin   (2006-12-19 20:57:00) [2]

А чем тебя не устроил режим виртуального списка?

где-то, можно в desing-time:

ListView1.OwnerData:= True;

и затем в обработчике ListView1.OnDataвыводишь заголовок для каждого элемента, для примера:

procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
 Item.Caption:= 'Элемент № ' + IntToStr(item.Index);
end;


На 10000 строк все практически мгновенно.


allrussia   (2006-12-19 20:37:00) [3]

Сергей М.

меня так и стояло, точнее LV.Items.BeginUpdate... и т.д.
пробовал так как вы сказали, те же грабли

Desdechado

А зачем нужны списки "хотя бы в 1 колонку несколько тысяч строк"?
Я так понимаю, что хочется больше и уже не в одну колонку?
Может, лучше о Grid подумать? Или о БД?


Я как раз думаю над этим... Вот благодаря наводкам выше (TVirtualTreeView) нашел бесплатный компонент NextGrid, на котором пока остановился. По крайней мере, он быстрее LV, и выгрузка моментальная.
А по поводу списков согласен с одной стороны они не нужны. Но когда скроллингом мотаешь на какой-нибудь n-цатый элемент, в DB-Aware компонентах жуткие тормоза, поэтому приходится подгружать все строки сразу в 1 колонку + с мультиселектом у многих явные проблемы. Зачем мотать? Есть поиск! А зачем тогда отрисовывать элементы? Если есть поиск...

По крайней мере я пока не нашел DB-компонента который удовлетворял бы именно в юзабельности. Несомненно, по функционалу они крутые (например TMS grids, BERG NextDBGrid). Но вот в использовании часто возникает ряд неприятных проблем/глюков. Потому что разработчики уже не обращают внимание на такие мелочи, они именно работают на функционал.

В общем, это примерно тоже самое когда есть 2 крутые программы, первая супер по функционалу, но нет горячих клавиш, а во второй меньше возможностей, но есть программируемые горячие клавиши. И несмотря на супервозможности первой программы, ты работаешь со второй, так как в десятки раз быстрее. Время-деньги.


Desdechado   (2006-12-19 10:55:00) [4]

А зачем нужны списки "хотя бы в 1 колонку несколько тысяч строк"?
Я так понимаю, что хочется больше и уже не в одну колонку?
Может, лучше о Grid подумать? Или о БД?


Сергей М.   (2006-12-19 10:18:00) [5]


> В Form.OnClose


пробуй:

LV.BeginUpdate;
try
 Items.Clear;
finally
 LV.EndUpdate;
end;


MetalFan   (2006-12-19 00:18:00) [6]

> [5]
TerminateProcess )))))
шутка.
подумай над [4].
или используй TVirtualDrawTree/TVirtualStringTree - очень удобные/быстрые компоненты


allrussia   (2006-12-19 00:05:00) [7]

Eraser

Application.terminate


trubin   (2006-12-18 23:54:00) [8]


> В Form.OnClose поместил код LV.OwnerData:= True


Это совсем не то, разбирайся:

Delphi + F1

Yandex + "ListView виртуальный список"


Eraser   (2006-12-18 23:41:00) [9]

> [2] allrussia ©   (18.12.06 23:37)

какой код выполняется при закрытии приложения?


allrussia   (2006-12-18 23:37:00) [10]

trubin

Возможно поможет использование ListView в режиме виртуального списка:
OwnerData:= True;

Потестил, время засекал - те же пироги...
Хотя может чего не так делаю?
В Form.OnClose поместил код LV.OwnerData:= True


trubin   (2006-12-18 23:05:00) [11]

Возможно поможет использование ListView в режиме виртуального списка:
OwnerData:= True;


Наверх

Титульная страница Поиск, карта сайта Написать письмо