BBAzar Ответов: 4

Самый быстрый способ заполнения Combobox большим объемом данных


Я пишу приложение для базы данных, в котором мне нужно загрузить около тысячи списков элементов из базы данных в combobox. Извлечение и заполнение данных в combobox выполняется успешно с помощью
foreach
петля. Но проблема заключается в том, что заполнение combobox занимает слишком много времени из-за большого списка элементов для заполнения.

Может ли кто-нибудь помочь мне с идеей о том, как заполнить combobox как можно быстрее? Я буду очень благодарен за это. Спасибо.

4 Ответов

Рейтинг:
30

Pete O'Hanlon

Вместо того чтобы явно загружать данные в поле со списком по одному элементу за раз, почему бы вам не привязать к нему данные сразу после их извлечения? Это, как правило, намного эффективнее.

Однако есть ли причина, по которой вам нужно отображать так много элементов? По моему опыту, пользователи не захотят пробираться через такое количество предметов, чтобы найти тот, который им нужен. Вместо загрузки 1000 элементов, почему бы не обеспечить автозаполнение вместо этого?


Dylan Morley

Полностью согласен с вашим вторым абзацем - 1000-это слишком много, чтобы отображать их в выпадающем списке.

Для пользы операции вот единственное, что я смог быстро найти по этому вопросу
http://www.ixda.org/node/19338

Обратите внимание, что люди говорят, что у вас не должно быть больше 12 \ 30 и т. д.?

Есть лучшие способы отображения данных, чем выпадающие списки при работе с большими наборами данных. Выпадающие списки лучше всего подходят для небольшого выбора возможностей.

Автозаполнение-это, безусловно, правильный путь :)

Рейтинг:
1

lw@zi

Тысяча-не такое уж большое число. В идеале их обработка не должна занимать много времени. Вы уверены, что это петля, которая занимает так много времени?


BobJanova

Если это вызывает обновление пользовательского интерфейса каждый раз, это, конечно, может быть.

Рейтинг:
1

BobJanova

Либо использовать Предметы.AddRange[^] чтобы добавить все элементы одновременно, или обернуть свой цикл в BeginUpdate[^]/EndUpdate.

Edit: но на самом деле это слишком много элементов, чтобы поместить их в раскрывающийся список, вместо этого вы должны использовать текстовое поле автозаполнения или что-то подобное.


Рейтинг:
1

Ganesan Senthilvel

Вместо ForEach вы можете попробовать Parallel.ForEach в системе.Нарезание резьбы.Пространство имен задач.

Parallel.ForEach 


Вот пример кода:
IEnumerable<string> items = ...

Parallel.ForEach(items, item => {
   ...
});
</string>


BobJanova

Это совсем не поможет при обновлении элемента управления пользовательского интерфейса.