C# 为什么逐行匹配datagridview中列的值会消耗大量内存?

C# 为什么逐行匹配datagridview中列的值会消耗大量内存?,c#,datagridview,C#,Datagridview,我有一个名为dgv的DataGridview对象,它的DataSource属性设置为BindingSource对象,该对象反过来指向名为ds.DataTable1的DataTable对象DataTable1有一个Name列 首先,我让它使用tableAdapter.Fill(ds.dataTable1)加载700000个完全填充的行。然后我使用for循环运行搜索,如下所示: int rowCount = dgv.Rows.Count; string searchName = "zeld

我有一个名为
dgv
DataGridview
对象,它的
DataSource
属性设置为
BindingSource
对象,该对象反过来指向名为
ds.DataTable1
DataTable
对象
DataTable1
有一个
Name

首先,我让它使用
tableAdapter.Fill(ds.dataTable1)
加载700000个完全填充的行。然后我使用for循环运行搜索,如下所示:

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;
    }
}
是罪魁祸首

你知道为什么打这条电话要花费数十万时间吗?我知道这个datagridview会消耗大量内存,因为它需要保存大量数据,但我并不真正理解为什么循环和搜索datagridview中每一行中的匹配项会导致更大的内存消耗


我对内存管理相当陌生,因此希望能参考一些资源来解释这一点。

对于每一行,您都在调用整个datagridview中的整行,而您只需要一列

您可以通过制作一个只包含您正在搜索的列的列表来缩短通话时间。也许将dgv设置为一列,然后检查其值所需的内存更少

此查询可帮助您仅接收列值:

List<string> columnvalues = new List<string>();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
    columnvalues.Add(row.Cells[column1.Name].Value.ToString());
}

if (columnvalues.Contains(searchName.ToUpper())
{
    break;
}
List columnvalues=new List();
foreach(dataGridView1.Rows中的DataGridViewRow行)
{
columnvalues.Add(row.Cells[column1.Name].Value.ToString());
}
if(columnvalues.Contains(searchName.ToUpper())
{
打破
}

来源:

对于每一行,您调用的是整个datagridview中的整行,而您只需要一列

您可以通过创建一个只包含您正在搜索的列的列表来缩短调用。也许将dgv设置为一列,然后检查其值会节省内存

此查询可帮助您仅接收列值:

List<string> columnvalues = new List<string>();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
    columnvalues.Add(row.Cells[column1.Name].Value.ToString());
}

if (columnvalues.Contains(searchName.ToUpper())
{
    break;
}
List columnvalues=new List();
foreach(dataGridView1.Rows中的DataGridViewRow行)
{
columnvalues.Add(row.Cells[column1.Name].Value.ToString());
}
if(columnvalues.Contains(searchName.ToUpper())
{
打破
}

来源:

我认为您希望在适配器中搜索绑定的datatable,而不是datagridview。您可以使用返回datatable行数组。或者,如果您只是通过搜索筛选datagridview行,请使用我相信向用户提供700000行数据是没有用的。假设数据位于da中ta base,那么我无法想象对数据库的“搜索”查询将花费更长的时间或消耗更多的内存,而您正在尝试通过网格或数据表进行循环。您能解释“为什么”吗那么多的数据需要呈现给用户,而数据最初是如何存储的?我想,有了这么多的数据,用户会键入他们正在搜索的内容,然后查询数据库中的内容。我猜我遗漏了一些内容。我想您希望在适配器中搜索绑定的datatable,而不是datagridview。您可以使用返回datatable行的数组。或者,如果您只是通过搜索筛选datagridview行,请使用“我相信向用户提供700000行数据不会有任何用处”。假设数据位于数据库中,则我无法想象“搜索”对数据库的查询将花费更长的时间或消耗更多的内存,而您尝试在网格或数据表中进行任何循环都无法完成。您能解释一下“为什么”吗那么多的数据需要呈现给用户,数据最初是如何存储的?我想,有了这么多的数据,用户会键入他们正在搜索的内容,然后查询数据库中的内容。我猜我遗漏了什么。