У меня та же проблема, и я попытался решить проблему установки активного флага, как вы, и я также попробовал решение установить RowCount в 0 (или grid.Rows.Clear ()) перед установкой нового RowCount.
Обе эти вещи улучшили производительность, но ни одна из них не ускорилась настолько, чтобы быть настолько быстрой, насколько я хочу, потому что я динамически фильтрую сетку в режиме реального времени на основе ввода из окна поиска.
Я нашел два других решения:
1) Используйте нумерацию страниц, чтобы вам не нужно было устанавливать RowCount так высоко для начала. Я думаю, что это отличное решение, если вы уже используете нумерацию страниц (в этом случае вас здесь нет), но слишком громоздкое, если вы не планируете его внедрять.
2) Поместите вызов, чтобы установить RowCount в своем собственном потоке. Это тот, который я собираюсь попробовать. Честно говоря, не уверен, насколько это безопасно, если вы пытаетесь редактировать ячейки, пока поток еще не закончил, но я думаю, я скоро это выясню.
EDIT:
ОК, поэтому я попытался проделать это, надеясь, что это поможет, так как я прочитал в другом месте, что это действительно помогло другому парню. Кажется, это хорошее решение ЕСЛИ вы просто время от времени меняете значение, но оно все равно зависает, если вы делаете это несколько раз подряд (что я). Я думаю, что это потому, что вы должны использовать Invoke (), и во второй раз он все еще ждет завершения первого. Не могу сказать, что полностью понимаю, в чем дело, но я решил пока просто жить с пустыми строками, потому что это СООО гораздо быстрее и менее сложно, когда я просто оставляю их там.