#c# #winforms #datagridview
#c# #winforms #datagridview
Вопрос:
Я хочу обновить DataGridView в моем приложении form, и я написал код, подобный приведенному ниже:
private void UpdateTable(DataList newDataList)
{
this.dataGridView1.Rows.Clear();
foreach (Data data in newDataList)
this.dataGridView1.Rows.Add(data.Name, data.Value);
}
И когда я отлаживал, я заметил, что использование памяти увеличилось при добавлении строк.
Я хочу, чтобы старые строки были удалены из памяти, поскольку после удаления на них не ссылаются, но они будут продолжать оставаться в памяти.
Есть ли эффективный способ сделать это? (Или я что-то недопонимаю?)
Комментарии:
1. Сборщик мусора не выполняется мгновенно.
2. Я использовал отладчик, чтобы подтвердить, что сборка мусора выполнялась много раз, но это не уменьшает использование памяти.
3. Короче говоря, все в порядке. Чтобы быть уверенным, просто узнайте как можно больше о том, как на самом деле работает сборка мусора. Для теста вы можете запустить цикл очистки добавления, например, 1000 раз, и вы увидите, что после некоторого выполнения GC уменьшит объем потребляемой памяти. Таким образом, вы не получите x1000 памяти, выделенной для приложения. Связанная память тоже может быть свободной. GC не делает его несвязанным немедленно, потому что выделение памяти из ОС является более медленной операцией, чем повторное использование уже связанной. Основы сборки мусора .
4. Спасибо за ваши комментарии. Правильно ли я понимаю, что если памяти достаточно для использования, нет ничего странного в том, что неиспользуемая память не освобождается при выполнении GC? Я хотел бы узнать больше о GC.
5. Не добавляйте данные в datagridview, добавьте их в связываемый контейнер (DataTable, List<T>) и привяжите к нему сетку. Узнайте больше о GC; надеюсь, вы придете к выводу, что в основном вам следует оставить его в покое, чтобы он выполнял свою работу по своему усмотрению