日期:2014-05-18  浏览次数:21180 次

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()方法,这样系统就不会自己进行转换了。而是按照你的方法进行转换。
------解决方案--------------------
路过!看看!


值得研究哦!