У меня есть объект DataGridview
с именем dgv
, в результате чего его свойство DataSource
установлено на объект BindingSource
, который, в свою очередь, указывает на объект DataTable
с именем ds.DataTable1
. DataTable1
имеет столбец Name
.
Во-первых, я загрузил 700 000 полностью заполненных строк, используя tableAdapter.Fill(ds.dataTable1)
. Затем я запускаю поиск, используя for-l oop, например:
int rowCount = dgv.Rows.Count;
string searchName = "zelda";
// Search next record
for (int i = 0; i < rowCount; i++)
{
if (dgv.Rows[i].Cells[column1.Name].Value.ToString() == searchName.ToUpper())
{
break;
}
}
Я понял, что этот поиск использует больше, чем объем памяти, используемый для Fill
в наборе данных. Чтобы проиллюстрировать, когда я инициализирую приложение, оно занимает всего около 50 МБ. Когда я Fill
набор данных, потребление памяти достигает 600 МБ. Когда я запускаю поиск, использование памяти достигло 1,5 ГБ, прежде чем возникла ошибка нехватки памяти, поскольку мое приложение является 32-разрядным.
Я обнаружил, что эта строка
if (dgv.Rows[i].Cells[column1.Name].Value.ToString() == searchName.ToUpper())
виноват.
Есть идеи, почему вызов этой строки в течение сотен тысяч раз потребляет такой большой объем памяти? Я понимаю, что этот datagridview потребляет много памяти, поскольку он должен хранить большой объем данных, но не совсем понимаю, почему процесс зацикливания и поиска совпадения в каждой строке в DataGridview вызывает еще большее потребление памяти.
Я новичок в управлении памятью, поэтому был бы признателен за ссылки на ресурсы, которые объясняют это.