У меня DGV без привязки к данным (источник данных и т. Д .; строки добавлены вручную). Чтобы отфильтровать его, я делал проверку в цикле и правильно устанавливал свойство visible для строк. Это хорошо работало с меньшими тестовыми наборами, но совершенно не работало с большими. 1k строк фильтруется при 5000 / сек. 10k строк фильтруются со скоростью всего ~ 250 / сек. 50 КБ всего за 40 / сек. Мое предположение о том, что происходит, заключается в том, что каждый раз, когда я меняю видимость строк, DGV перестраивает список отображаемых строк, превращая процесс фильтрации в операцию O (n ^ 2).
Хотя даже 10 тыс. Строк указывают на то, что пользователь злоупотребляет системой; нужно вести учет пользователей с плохим поведением, поэтому мне нужно сделать что-то по-другому. Есть ли более быстрый способ фильтрации большого количества строк, чем то, что я делаю сейчас, без использования привязки данных, или мне нужно прибегнуть к очистке / воссозданию всех строк (для разумных объемов данных это значительно медленнее)?
//psuedocode. runs slowly if more than a few thousand rows.
foreach (DataGridViewRow row in myDGV)
{
row.Visible = CalculateFilter(row);
}