nesco писал(а):
Гы. Вот это бред. См. внимательноТормоз вот здесь
nesco писал(а):
Control.Add(List.Items[i]);
Ответов: 16884
Рейтинг: 1239
|
|||
nesco писал(а): Гы. Вот это бред. См. внимательноТормоз вот здесь nesco писал(а): Control.Add(List.Items[i]); |
|||
карма: 25 |
|
Разработчик
Ответов: 26153
Рейтинг: 2127
|
|||
Tad, попробовал заменить Add на Insert, удалось выдавить 0,5 sec, при загрузке файла 1,8 Мб за 6 сек
|
|||
карма: 22 |
|
Ответов: 5446
Рейтинг: 323
|
|||
Microsoft рекомендует делать WM_SETREDRAW перед массовым добавлением элементов в ListBox.
|
|||
карма: 1 |
|
Разработчик
Ответов: 26153
Рейтинг: 2127
|
|||
iarspider писал(а): Microsoft рекомендует...Попробовал, удалось выдавить еще секунду из 6 сек, те -- 5 сек, но на экране ничего не видел до окончания загрузки Тормоза находятся вот в этом сообщении -- LB_INSERTSTRING |
|||
карма: 22 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 2 раз(а), последний 2021-05-22 09:21:46 |
|||
карма: 0 |
|
Разработчик
Ответов: 26153
Рейтинг: 2127
|
|||
Нашел выход из положения -- SendMessage(Control.Handle, LB_INITSTORAGE, 0, 104857600). В разы ускоряет быстродействие (при выделенных 100 Мб)
------------ Дoбавленo в 16.22: Короче, вот такой метод doLoad, добавленный в ListBox, загружает файл в 1,8 Мб за 0,27 сек, вместо 6,5 сек раньше.
Что делать будем ------------ Дoбавленo в 16.50: Немного ускорил |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco писал(а): Что делать будем |
|||
карма: 25 |
|
Разработчик
Ответов: 26153
Рейтинг: 2127
|
|||
Tad писал(а): Вопрос к кому ?К начальнику транспортного цеха, он просил с ним советоваться в данном вопросе, Я на себя не готов брать такую ответственность, как исправление без обсуждения с руководством ------------ Дoбавленo в 16.57: Кстати, аналогично делается метод doText. Замечен интересный момент -- скорость намного быстрее в основном потоке, в дополнительном -- меньше ------------ Дoбавленo в 19.30: Tad писал(а): Блокнот за 50 секундПоследняя проверка показала, что файл размером 117 Мб у меня считался за... 12 сек, 54 Мб -- за 3 сек, тут, видимо, система память пожалела и не всю требованную выделила |
|||
карма: 22 |
|
Ответов: 5446
Рейтинг: 323
|
|||
nesco, в выложенном коде сразу вижу логическую ошибку: при Lst.Count = 0 не происходит включение отрисовки (WM_SETREDRAW 1). Советую всю работу с Control перенести после загрузки списка из файла.
|
|||
карма: 1 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Да, впечатляет: Файл на 800 000 строк загрузился за 10 сек, а раньше 43 минуты !
Как говорят на Украине: Цэ вжэ похожэ на людэй ------------ Дoбавленo в 20.50: nesco писал(а): Tad писал(а)Блокнот за 50 секундЕщё Tad писал(а): Lister TC открывает мгновенно |
|||
карма: 25 |
|
Разработчик
Ответов: 26153
Рейтинг: 2127
|
|||
iarspider писал(а): в выложенном коде сразу вижу логическую ошибкуГы, это -- прототип. Я уже заметил эту ошибку раньше, там еще одна грубая ошибка есть -- при Lst.Count = 0 не происходит очистка списка Вот, мой последний рабочий вариант -- удалено -- См. ниже ------------ Дoбавленo в 23.24: Tad писал(а): так что резервы ещё где-то естьВряд ли. Скорее всего, Lister использует виртуальный список |
|||
карма: 22 |
| ||
Голосовали: | Tad |
Ответов: 16884
Рейтинг: 1239
|
|||
Себе исправил, 10 сек против 43 минут - это вроде и принять можно
Остались остальные визуалки с точкой doLoad. Впереди выходные. Грузим |
|||
карма: 25 |
|
Разработчик
Ответов: 26153
Рейтинг: 2127
|
|||
Tad писал(а): Впереди выходныеТам нет таких функций, я уже искал Сделай код лучше так, без списка, но в этом случае, не кисло экономится память, практически, при той же скорости -- удалено -- См. ниже ------------ Дoбавленo в 00.33: Немнго подправил код |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Сделал. Тех же 10 сек. ОК.
|
|||
карма: 25 |
|
Разработчик
Ответов: 26153
Рейтинг: 2127
|
|||
Tad писал(а): Тех же 10 сек. ОКА память как потребляется, не проверял, в динамике |
|||
карма: 22 |
|