Я чувствую вашу боль, и лично я испытал, насколько медленным может быть ListViewItemsCollection
.
Вы можете получить доступ ко второму столбцу ListView
без цикла for, какэто:
string[] column1 = this.listView1.Items.Cast<ListViewItem>().Select(item => item.SubItems[1].Text).ToArray();
, но это не быстрее, чем цикл for.На самом деле это немного медленнее!Другие приемы, такие как попытка использования ListViewItemsCollection.CopyTo
, также приводят к сбою.
Основная проблема с ListView
заключается в том, что он патологически медленен при использовании в качестве структуры данных.Свойство ListView.Items
выглядит как структура данных, и вы можете использовать как структуру данных, но при любом ее разрезании:
- данные поступают вно это не получается быстро .
Так что, если вы последуете совету alexD, вы обнаружите, что real структура данных превзойдет ListViewItemCollection
на порядки.Мораль этой истории в том, что если вы хотите быстро запросить данные ListViewItemCollection
, у вас нет другого выбора, кроме как сохранить быструю копию вне ListView
.Практически любая структура данных подойдет, например,
- a
string[][]
- a
string[,]
- a
List<List<string>>
- a
List<string[]>
или даже - a
List<Tuple<string, string>>
.
Все они могут хранить те же данные, что и два столбца ListView
, и будут мгновенно быстрыми по сравнению с использованием ListView
как структура данных.Это неудобно, но это цена, которую мы должны заплатить за скорость.