日期:2014-05-17  浏览次数:20919 次

请问,如何释放对象?
List<string> list = new List<string>();
foreach(...)
{
    if(...)
    {
      list = new List<string>(){...}
       ...
       ...
     }
}

由于有大量数据,出现这种创建集合的对象,出现内存不足。请问如何释放先前的list呢?

------解决方案--------------------
只看这段代码,是没问题的。
当你new新的List时,原来的会在GC时释放。

这个list会有多大,又占了多少内存?

------解决方案--------------------
你这个代码是没有问题的。
托管对象的话一般不用考虑释放内存的事情,CLR自动执行内存回收操作。

对于非托管资源,不能自动回收掉,要注意手动释放。
------解决方案--------------------
不需要释放。CLR会自己回收的。
------解决方案--------------------
List<string> list =null;// new List<string>();//new 出来又不用,浪费掉了
foreach(...)
{//foreach 下面有new List<string>;数据又不会全部存放在上面,不知道你要干什么
    if(...)
    {
      list = new List<string>(1000){...}//如果可以预先知道会有多少个,先分配好空间,不然是2倍增长
       ...
       ...
//如果这里处理完了,
//那么可以
list=null;
GC.Collection();//强制回收内存
     }
}

读过3w条 xml数据~
整个程序运行占用150多M 你可以参考一下
------解决方案--------------------
用托管语言只要保证没有“死”引用造成的内存泄露 基本上不需要管内存的事情
如果需要考虑手动释放内存这种事情的时候 请使用低级语言去"硬碰硬"
------解决方案--------------------
你用 using(List<string> list = new List<string>()){foreach(...)
{
    if(...)
    {
      list = new List<string>(){...}
       ...
       ...
     }
}}试一下 
------解决方案--------------------
用完后,

list.Clear();
GC.Collect();