申请简单类型的一个数组: int [] ai = new int[100];在进行一系列操作之后,如果要对ai数组进行清空,直接用ai = new int [100]行吗?会不会内存泄漏?
c#中一般常规的清空数组的方法是怎么样的。

解决方案 »

  1.   

    new一个新的后你以前的会很快回收的不会有内存泄露
    Array.Clear这个常用
    一般的集合都有clear方法
      

  2.   

    数组这样的引用类型的对象,设置为null就可以了,比如ai = null;
    其实这些托管对象的资源释放是由CLR来做GC处理的,如非必要,自己不用做清空也可以。
      

  3.   

     
    可以Array.Clear(ai,0,ai.Length);
    不要在去申请内存了
      

  4.   

    你这个也行,放心用吧。 或者用 ai = null; 
    有Clear方法可以调用 XXX.Clear(), 没有的话直接=null;这种托管类型,你不用管它们的内存泄露的,只管用就是了。 .Net会自动管理内存。
    不过为了效率着想,还是不要乱用。呵呵。
      

  5.   

    int [] ai = new int[100]; 这个有两层含义
    1.在堆栈上定义一个int[]型的引用类型变量叫ai;
    2.在堆上分配int[100],并使ai指向int[100]的首地址。
    如果直接用ai = new int [100],原来在堆上分配的int[100]则没有引用了,如果内存不够,gc判断没有引用引着就回收了
    ai.Initialize();  //恢复默认值
      

  6.   

    clear()方法  C#有内置的GC回收机制  它好像是不能规定什么时间回收的
      

  7.   

    楼主重新New一个之后,可是手动强制释放托管内存
    GC.Collect();
      

  8.   

    垃圾回收只能通知CLR资源可以回收,但是什么时候回收,由他自己确定
      

  9.   


    完全可以这样清空。java和.net都是如此自动化,不是那种低级的“纯”c、c++。
      

  10.   

    强制地执行 GC.Collect(); 不但不会提高效率,反而是多余地执行了一次。