Ответ 1
Как говорит Ханс в комментарии к первому вопросу, они оба будут иметь ужасную производительность, превзойденную только неудовольствием, которое ваши пользователи, несомненно, испытают при безумии множества строк данных, отображаемых одновременно.
Но если это неизбежно в вашем приложении (и вы предоставляете очень хорошую функцию поиска), вам следует настоятельно рассмотреть возможность использования опции виртуального режима, независимо от того, какой элемент управления вы решите использовать. Это означает, что вы должны предоставить свои собственные операции управления данными, а не полагаться на элемент управления, чтобы сделать это за вас. Преимущество в том, что вещи намного быстрее. В документации говорится:
Виртуальный режим предназначен для использования с очень большими хранилищами данных. Когда свойство
VirtualMode
равно true, вы создаетеDataGridView
с заданным количеством строк и столбцов, а затем обрабатываете событиеCellValueNeeded
для заполнения ячеек. Виртуальный режим требует реализации базового кэша данных для обработки населения, редактирования и удаления ячеек DataGridView на основе действий пользователя. Дополнительные сведения об использовании виртуального режима см. В разделе Практическое руководство. Реализация виртуального режима в элементе управления DataGridView Windows Forms.
Или, для ListView
control:
Установка свойства
VirtualMode
в true помещаетListView
в виртуальный режим. В виртуальном режиме обычнаяItems
коллекция не используется. Вместо этогоListViewItem
объекты создаются динамически, поскольку их требует ListView.Виртуальный режим может быть полезен при многих обстоятельствах. Если объект
ListView
должен быть заполнен из очень большой коллекции, уже имеющейся в памяти, создание объектаListViewItem
для каждой записи может быть расточительным. В виртуальном режиме создаются только требуемые элементы. В других случаях значения объектовListViewItem
могут нуждаться в повторном пересчете, и выполнение этого для всей коллекции приведет к неприемлемой производительности. В виртуальном режиме рассчитываются только необходимые элементы.Чтобы использовать виртуальный режим, вы должны обработать событие
RetrieveVirtualItem
, которое поднимается каждый раз, когдаListView
требуется элемент, Этот обработчик событий должен создать объектListViewItem
, который принадлежит указанному индексу. Кроме того, свойствоVirtualListSize
должно быть установлено в размере виртуального списка.Обработка
SearchForVirtualItem
событие позволяет осуществлять поиск в виртуальном режиме. Если это событие не обрабатывается,FindItemWithText
иFindNearestItem
возвращает значение null.Вы можете обработать событие
CacheVirtualItems
, чтобы сохранить кэш объектовListViewItem
. Если вычисление или поиск для создания объектаListViewItem
стоит дорого, сохранение кеша может повысить производительность.В виртуальном режиме коллекция
Items
отключена. Попытка получить доступ к ней приводит кInvalidOperationException
. То же самое относится к коллекцииCheckedItems
иSelectedItems
коллекция. Если вы хотите получить выбранные или отмеченные элементы, используйтеSelectedIndices
иCheckedIndices
.