在程序中有这样的代码片段
string content = "";
//Grid.Rows.Count = 5000
for(int i =0 ; i <Grid.rows.Count; i++)
{
//这句代码引起内存消耗猛增
content=Grid.Rows[i].Cells[0].value.tostring();
{
/*下面的代码都已注释.方便测试
....
*/
}
}
在运行上面的代码过程中, TaskManager中的内存资源占用不断增加(当前进程的)
主要这句代码所引起 content=Grid.Rows[i].Cells[0].value.tostring();
接下来,做了另外两个测试
1 将content=Grid.Rows[i].Cells[0].value.tostring();这句代码修改为 content = i.tostring(); 运行测试,内存占用无明显变化
2 将content=Grid.Rows[i].Cells[0].value.tostring();这句代码修改为Grid.Rows[i].Cells[0].value.tostring(); 运行测试,内存资源占用不断增加
由此确定,内存资源占用是Grid.Rows[i].Cells[0].value.tostring();这句代码所引起.
但是不清楚这句代码为什么会引起这么大的内存资源消耗, 还请大家指点.
1 Grid.Rows[i].Cells[0].value 值是字符串2 i.tostring() 不怎么增长是因为常用的字符串都被缓存了可以重复使用
应该只是在第一次调用上面的代码片段的时候会出现内存增长
那为什么继续调用(比如第2次,3,4... ...)上面的代码片段时, 任然会不断的增长呢?
1 Grid是直接与DataTable进行绑定的,Cells[0]绑定的是一个nvarchar()的列
2 Content这个变量只是我后面注释的代码中会用到的,不过请注意,根据我测试的情况
将content=Grid.Rows[i].Cells[0].value.tostring();这句代码修改为Grid.Rows[i].Cells[0].value.tostring(); 依然有内存占用不断增加的问题,所以问题不杂Content上面,而在Grid.Rows[i].Cells[0].value.tostring(); 上面
3 "根据.NET对字符串的使用方法,Grid.Rows[i].Cells[0].value的值如果不同,吃内存也是挺正常的" 是的,在第一次调用上面的代码片段时,会耗内存,但是为什么在后续的调用过程中,内存消耗依然在增加
说明: 现在问题已经解决, 如下
将content=Grid.Rows[i].Cells[0].value.tostring();
修改成 content =DataTable.Rows[i][0].ToString();(DataGridview与DataTable绑定的) 以后
内存资源消耗就要小的多
所以我想问题是不是出在DataGridview的 处理机制上