![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Приложение очень долго закрывается [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;