|
Вернулся
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,803
|
||||||
Как добавить в список ListBox большое количество строк, чтобы это было быстро по времени?27.09.2023, 11:31. Показов 7256. Ответов 125
Всем привет! У меня есть листбокс List1 в VB6 и я пытаюсь добавить в этот список много строк, скажем 10 тысяч строк, но я хочу добавить их таким образом, чтобы они добавились быстро по времени, а не ждать целую секунду... Я этого делать не умею, поэтому помогите пожалуйста! Единственный лайфхак который я нашёл это сначала скрывать список а потом показывать так можно добавить в список много строк в 3 раза быстрее, но для 10 тысяч строк это всё равно занимает целых пол секунды времени...
Добавлено через 24 минуты Вопрос: почему не работает сообщение LB_INITSTORAGE? Добавлено через 24 секунды Скорость добавления в листбокс никак не изменилась!
0
|
||||||
| 27.09.2023, 11:31 | |
|
Ответы с готовыми решениями:
125
Как быстро создать список на большое количество элементов? Максимально быстро записать большое количество строк SQLite Как сделать так чтобы из продуктов можно было добавить в блюда и это списывалось все на кухне |
|
Вернулся
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,803
|
||||||
| 09.05.2024, 18:59 [ТС] | ||||||
|
testuser2, Без всяких сомнений, конечно, твой проект очень интересный, но я взял на себя смелость протестировать скорость твоего проекта немного изменив код:
Так и вот у меня вопрос: стоит ли это всё свеч, если в итоге получилось даже медленнее, чем по моей технологии через простые API такие как CreateWindowEx и SendMessage ?
0
|
||||||
|
Вернулся
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,803
|
|
| 09.05.2024, 19:05 [ТС] | |
|
Приношу извинения, проблема в рандомайзе именно он тут тормозит, убрав рандом получилось в среднем за 32 млск, чуть быстрее, чем у меня всё же значит. Но незначительно.
0
|
|
|
Вернулся
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,803
|
|
| 09.05.2024, 19:07 [ТС] | |
|
Но твоя технология ограничевается 32767 строк добавления в листбокс, а я могу хоть сто тысяч добавить.
0
|
|
|
Вернулся
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,803
|
|
| 09.05.2024, 19:11 [ТС] | |
|
32767 строки у тебя добавляется тоже за 32 млск, а у меня за 78. у тебя получается всё же чуть-чуть быстрее значит.
Но зато мой код может добавлять больше чем 32767 строк.
1
|
|
| 09.05.2024, 19:12 | |
|
У меня еще медленный join надо учитывать. А так просто интересно было протестировать механизм работы, что будет если писать все напрямую писать в память. Но я ранее подобное уже тестировал в экселе при записи в ячейки и н.др. и там также работало.
1
|
|
|
Вернулся
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,803
|
|
| 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
|
|
|
Вернулся
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,803
|
|||
| 10.05.2024, 17:30 [ТС] | |||
|
Добавлено через 6 минут
0
|
|||
|
Вернулся
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,803
|
|
| 10.05.2024, 17:55 [ТС] | |
|
testuser2, да это в стандартном VB'шном листбоксе так, скорее всего, по хорошему надо создавать ListBox через API. Но скорее всего, что там опять будет другая структура памяти в АПИшном листбоксе и твои коды уже не будут работать. Этот стандартный листбокс ВБшный не поддерживает юникод, к сожалению, поэтому лучше всего API'шный конечно...
Добавлено через 1 минуту Но с другой стороны, юникодные символы можно нарисовать самому, даже в стандартном VB'шном ансишном листбоксе, через субклассирование и пользовательскую отрисовку листбокса... Добавлено через 2 минуты Но стандартный VB'шный листбокс не получает правильные индексы после 32767 строки, а так же не имеет возможности отключения перерисовки почему-то, то есть минусов хватает...
0
|
|
| 10.05.2024, 17:56 | |
|
С другой стороны, там если строго идет обратная нумерация, то можно по ней вычислять правильное значение индекса. Наверное во внутреннем алгоритме там используются беззнаковые инты а в vb-шном лонге они интерпретируются неправильно после определенного значения
0
|
|
|
Вернулся
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,803
|
|||
| 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
|
||||||
|
Вернулся
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,803
|
|
| 10.05.2024, 19:13 [ТС] | |
|
testuser2, спасибо но это скорее всего только до 65535 строки, а потом правильно получиться вычислить уже только через API
Добавлено через 3 минуты Да, как я и думал, 65536 последняя строка которую правильно вычислит это одно-байтная технология. Только через API дальше можно вычислять. Добавлено через 28 минут testuser2, молодец, что придумал новый улучшенный код обновления листбокса! мне это понравилось! но лучше всё равно написать oList.TopIndex = 0 вместо oList.TopIndex = 1
0
|
|
|
Вернулся
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,803
|
|
| 10.05.2024, 21:43 [ТС] | |
|
testuser2, знаешь я тебе очень благодарен за твои труды и поэтому я решил не полениться и сделать подбробную инструкцию в картинках Как посмотреть память процесса и найти нужные строковые значения в памяти процесса в программе Process Hacker при этом не копаясь сразу во всём дампе. Там же можно и менять прямо напрямую эти значения в памяти. Это удобно ковыряться и смотреть память. Может ты там сможешь и структуру листбокса рассмотреть.
1
|
|
|
Вернулся
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,803
|
|
| 10.05.2024, 21:46 [ТС] | |
|
На втором экране нужно будет ввести минимальное количество символов для поиска строки. Можно ввести например длину символов той строки которую ты будешь искать. Результат будет вот таким что ты сможешь точно увидеть все эти строки листбокса.
1
|
|
|
Вернулся
1753 / 649 / 45
Регистрация: 10.09.2021
Сообщений: 2,803
|
|
| 10.05.2024, 21:58 [ТС] | |
|
testuser2, теперь ты тоже хакер) ты взломал память процесса и напрямую записал целлый массив строк листбокса, даже The Trick такое не сделал))))
Добавлено через 58 секунд testuser2, мне интересен изначальный алгоритм поиска. Что ты ищешь в самом начале? Как ты определил заголовочную структуру листбокса? Как понял куда нужно записывать количество строк?
0
|
|
| 10.05.2024, 21:58 | |
|
Как исправить, чтобы количество столбцов и строк StringGrid было таким, как ввел пользователь Как добавить значения с Листа в Listbox, если количество строк может меняться
Поиск минимального времени выполнения теста, чтобы количество набранных баллов было максимальным Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|