Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.07;
Скачать: CL | DM;

Вниз

Приложение очень долго закрывается   Найти похожие ветки 

 
allrussia ©   (2006-12-18 23:01) [0]

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


 
trubin ©   (2006-12-18 23:05) [1]

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


 
allrussia ©   (2006-12-18 23:37) [2]

trubin

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

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


 
Eraser ©   (2006-12-18 23:41) [3]

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

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


 
trubin ©   (2006-12-18 23:54) [4]


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


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

Delphi + F1

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


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

Eraser

Application.terminate


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

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


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


> В Form.OnClose


пробуй:

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


 
Desdechado ©   (2006-12-19 10:55) [8]

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


 
allrussia ©   (2006-12-19 20:37) [9]

Сергей М.

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

Desdechado

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


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

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

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


 
trubin ©   (2006-12-19 20:57) [10]

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

где-то, можно в 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-20 02:03) [11]

trubin

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



Страницы: 1 вся ветка

Текущий архив: 2007.01.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.041 c
15-1166296486
ArtemESC
2006-12-16 22:14
2007.01.07
Как это читается?


6-1155286255
Exot
2006-08-11 12:50
2007.01.07
Перехват данных


15-1162982792
Lamer@fools.ua
2006-11-08 13:46
2007.01.07
[Вакансия] Киев, до $1000, Junior .NET Developer (C#)


2-1166371759
sinus
2006-12-17 19:09
2007.01.07
рисование иконки в Statusbar


4-1156701339
AlexKRAM
2006-08-27 21:55
2007.01.07
Программно добавить пользователя Windows