Grid.Rows[i].Cells[0].value.tostring()内存占用问题?
在程序中有这样的代码片段
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();这句代码所引起.
但是不清楚这句代码为什么会引起这么大的内存资源消耗, 还请大家指点.
------解决方案--------------------帮楼主顶顶,做程序很少考虑内存问题,以后要注意了
------解决方案--------------------Grid.Rows[i].Cells[0].value 值具体是什么
i.tostring() 不怎么增长是因为常用的字符串都被缓存了可以重复使用
------解决方案--------------------首先, content 这个变量,是做什么的?
其次,根据.NET对字符串的使用方法,Grid.Rows[i].Cells[0].value的值如果不同,吃内存也是挺正常的。
所以,应该看看整体的设计,才能提出更好的方法吧。
------解决方案-------------------- 帮顶一下,哥们.期待高手.
------解决方案--------------------找你的说法,可以肯定的是Grid.Rows[i].Cells[0].value中不是值类型的数据,而是引用类型的(或者是你自己定义的类对象),并且可以肯定的是这个Grid.Rows[i].Cells[0].value中的数据没有重载ToString()方法,导致程序去自己调用系统的ToString()函数,这样导致所有的消耗都在转化为ToString的方法上,你可以自己重写ToString()方法,这样系统就不会自己进行转换了。而是按照你的方法进行转换。
------解决方案--------------------路过!看看!
值得研究哦!