СообЧа > База Знаний > Программирование > Visual Basic

Вопрос

Как проще всего хранить элементы (размером примерно 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 Сообщество Чайников
Контактная информация