Вопрос
Как проще всего хранить элементы (размером примерно 5 кб) в списке?
Смысл вот в чем. Приходит сообщение. В один несортированый лист пишется ник отправителя, в другой лист(невидимый) — текст письма. Потом этот текст показывается в текстбокс, а по прочтении в обоих листах итем с этим индексом удаляется. Как это лучше всего реализовать?
Ответ
Можно использовать массивы (они много раз быстрее любого ЭУ, тем паче, ListBox'а, который просто не предназначен для подобных экспериментов).
Создаешь всего 2 массива
masNick() as String
masLetter() as String
И либо переменную, хранящую максимальный Bound (тогда придется перебирать массив в цикле, дабы обнаруживать пустые элементы, например, после их удаления из средины), либо такую переменную и еще один массив, который будет хранить булевые значения занят N'ный элемент массива или нет.
Можно пойти еще дальше и использовать всего один массив пользовательского типа:
Type XXX
IsUsedItem as Boolean
strNick as String
strLetter as String
End Type
А список с никами строить уже на основе данного массива.
Ресайзить массив его я вижу смысл только если:
а) массив слишком мал для вмещения нового сообщения (все итемы используются, пустых нету);
б) в конце массива появилось N пустых итемов (удаление из конца массива — это очень быстро и безболезненно — 1 строчка кода);
в) какой-то цикл для «дефрагментации» с целью очистки излишков занимаемой памяти (опционально).
В остальных случаях при появлении нового сообщения ищешь первый свободный элемент, если таковой есть (если нет — добавляешь в конец новый), и используешь его. Как только элемент утратил необходимость, обнуляешь итем (а не удаляешь его с последующими муторными операциями по перемещению итемов.), возможно, через пару секунд он уже будет занят новыми данными. Такая модель должна быть достаточно быстрой и оптимальной.
Это, что касательно массивов. А можно, даже, наверное, логичней, использовать коллекцию, в которой добавлять и удалять элементы разрешено в любом месте, хоть в начале, хоть в конце, хоть в средине.
Savenger
Copyright 2000-2004 Сообщество Чайников
Контактная информация