|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||||
Как добавить в список ListBox большое количество строк, чтобы это было быстро по времени?27.09.2023, 11:31. Показов 7039. Ответов 125
Всем привет! У меня есть листбокс List1 в VB6 и я пытаюсь добавить в этот список много строк, скажем 10 тысяч строк, но я хочу добавить их таким образом, чтобы они добавились быстро по времени, а не ждать целую секунду... Я этого делать не умею, поэтому помогите пожалуйста! Единственный лайфхак который я нашёл это сначала скрывать список а потом показывать так можно добавить в список много строк в 3 раза быстрее, но для 10 тысяч строк это всё равно занимает целых пол секунды времени...
Добавлено через 24 минуты Вопрос: почему не работает сообщение LB_INITSTORAGE? Добавлено через 24 секунды Скорость добавления в листбокс никак не изменилась!
0
|
||||||
| 27.09.2023, 11:31 | |
|
Ответы с готовыми решениями:
125
Как быстро создать список на большое количество элементов? Максимально быстро записать большое количество строк SQLite Как сделать так чтобы из продуктов можно было добавить в блюда и это списывалось все на кухне |
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||||
| 09.05.2024, 18:59 [ТС] | ||||||
|
testuser2, Без всяких сомнений, конечно, твой проект очень интересный, но я взял на себя смелость протестировать скорость твоего проекта немного изменив код:
Так и вот у меня вопрос: стоит ли это всё свеч, если в итоге получилось даже медленнее, чем по моей технологии через простые API такие как CreateWindowEx и SendMessage ?
0
|
||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 09.05.2024, 19:05 [ТС] | |
|
Приношу извинения, проблема в рандомайзе именно он тут тормозит, убрав рандом получилось в среднем за 32 млск, чуть быстрее, чем у меня всё же значит. Но незначительно.
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 09.05.2024, 19:07 [ТС] | |
|
Но твоя технология ограничевается 32767 строк добавления в листбокс, а я могу хоть сто тысяч добавить.
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 09.05.2024, 19:11 [ТС] | |
|
32767 строки у тебя добавляется тоже за 32 млск, а у меня за 78. у тебя получается всё же чуть-чуть быстрее значит.
Но зато мой код может добавлять больше чем 32767 строк.
1
|
|
| 09.05.2024, 19:12 | |
|
У меня еще медленный join надо учитывать. А так просто интересно было протестировать механизм работы, что будет если писать все напрямую писать в память. Но я ранее подобное уже тестировал в экселе при записи в ячейки и н.др. и там также работало.
1
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 09.05.2024, 19:20 [ТС] | |
|
У майкрософта кстати есть глюк в кодах организации вертикальной полосы прокрутки в листбоксе, когда я добавляю сразу 100 тысяч строк, а потом беру мышкой за ползунок вертикальной полосы прокрутки и прокручиваю до самого низу вниз то прокручивается вниз максимум только до 34464 позиции, понятно что это уже ограничение майкров, это их баг. не рассчитыывали они что в листбокс я буду сто тысяч строк добавлять видимо.
Добавлено через 4 минуты testuser2, спасибо, так же буду очень благодарен, если ты напишешь этот код, чтобы так же работал и с красивыми стилизованными окнами тоже.
0
|
|
| 10.05.2024, 04:42 | ||
|
Дампы примерно одинаковые по размеру получаются.
1
|
||
| 10.05.2024, 13:19 | ||||||
|
Сделал вариант для патченного манифестом эксешника. С манифестом заголовочная структура листбокса чуть отличается, она имеет размер 188 (против 216 без мф), и смещение указателя буфера в ней 44 (против 48 без мф)
1
|
||||||
|
428 / 333 / 61
Регистрация: 29.06.2019
Сообщений: 493
|
|
| 10.05.2024, 13:40 | |
|
2
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|||
| 10.05.2024, 17:30 [ТС] | |||
|
Добавлено через 6 минут
0
|
|||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 10.05.2024, 17:55 [ТС] | |
|
testuser2, да это в стандартном VB'шном листбоксе так, скорее всего, по хорошему надо создавать ListBox через API. Но скорее всего, что там опять будет другая структура памяти в АПИшном листбоксе и твои коды уже не будут работать. Этот стандартный листбокс ВБшный не поддерживает юникод, к сожалению, поэтому лучше всего API'шный конечно...
Добавлено через 1 минуту Но с другой стороны, юникодные символы можно нарисовать самому, даже в стандартном VB'шном ансишном листбоксе, через субклассирование и пользовательскую отрисовку листбокса... Добавлено через 2 минуты Но стандартный VB'шный листбокс не получает правильные индексы после 32767 строки, а так же не имеет возможности отключения перерисовки почему-то, то есть минусов хватает...
0
|
|
| 10.05.2024, 17:56 | |
|
С другой стороны, там если строго идет обратная нумерация, то можно по ней вычислять правильное значение индекса. Наверное во внутреннем алгоритме там используются беззнаковые инты а в vb-шном лонге они интерпретируются неправильно после определенного значения
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|||
| 10.05.2024, 18:06 [ТС] | |||
|
Добавлено через 2 минуты Добавлено через 58 секунд Индекс листбокса в правильном значении, я думаю, можно будет легко получить через API Добавлено через 6 минут testuser2, ну ты сам же это можешь легко увидеть ну. В VB работать не будет, только в EXE, так как ты откомпилировал EXE с галочкой "Remove Integer Overflow Checks" которая обозначает пропускать ошибки если Integer вдруг будет больше чем 32767
0
|
|||
| 10.05.2024, 18:39 | ||||||
|
Вот так будет вычисляться правильный индекс. В коде формы:
1
|
||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 10.05.2024, 19:13 [ТС] | |
|
testuser2, спасибо но это скорее всего только до 65535 строки, а потом правильно получиться вычислить уже только через API
Добавлено через 3 минуты Да, как я и думал, 65536 последняя строка которую правильно вычислит это одно-байтная технология. Только через API дальше можно вычислять. Добавлено через 28 минут testuser2, молодец, что придумал новый улучшенный код обновления листбокса! мне это понравилось! но лучше всё равно написать oList.TopIndex = 0 вместо oList.TopIndex = 1
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 10.05.2024, 21:43 [ТС] | |
|
testuser2, знаешь я тебе очень благодарен за твои труды и поэтому я решил не полениться и сделать подбробную инструкцию в картинках Как посмотреть память процесса и найти нужные строковые значения в памяти процесса в программе Process Hacker при этом не копаясь сразу во всём дампе. Там же можно и менять прямо напрямую эти значения в памяти. Это удобно ковыряться и смотреть память. Может ты там сможешь и структуру листбокса рассмотреть.
1
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 10.05.2024, 21:46 [ТС] | |
|
На втором экране нужно будет ввести минимальное количество символов для поиска строки. Можно ввести например длину символов той строки которую ты будешь искать. Результат будет вот таким что ты сможешь точно увидеть все эти строки листбокса.
1
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 10.05.2024, 21:58 [ТС] | |
|
testuser2, теперь ты тоже хакер) ты взломал память процесса и напрямую записал целлый массив строк листбокса, даже The Trick такое не сделал))))
Добавлено через 58 секунд testuser2, мне интересен изначальный алгоритм поиска. Что ты ищешь в самом начале? Как ты определил заголовочную структуру листбокса? Как понял куда нужно записывать количество строк?
0
|
|
| 10.05.2024, 21:58 | |
|
Как исправить, чтобы количество столбцов и строк StringGrid было таким, как ввел пользователь Как добавить значения с Листа в Listbox, если количество строк может меняться
Поиск минимального времени выполнения теста, чтобы количество набранных баллов было максимальным Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|