Текущий архив: 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.47 MB
Время: 0.01 c