DataSet read;read = bll.get_dataset_withpage_oforder("Store_account", "accountid", pageno, pagesize, "*", orde, where);//获取dataset对象
                datalist.DataSource = read;
                datalist.DataBind();read = null;我想问一下写程序的时候写read=null还用写 read.Dispose();么是不是 read.Dispose();方法在page_unload里会自动销毁对象?
请高手指点一下谢谢了

解决方案 »

  1.   

    read = null这个不用写.
    read.Dispose();这个也不用写.
      

  2.   

    直接写read.Dispose();就可以了。不能写read=null;
    如果read是datatable类型的。。可以read.dispose(); read=null;
      

  3.   

    要释放的话 read.Dispose();这个就行了.
      

  4.   

    maco_wang
      能问一下是怎么个自动回收机制么?
      

  5.   

    如果你的数据量比较大,还是建议使用Dispose方法。
    如果只是=null的话,实际上数据将被放到垃圾管理器(GC)里
    而用Dispose方法会调用GC将对象所占用的内存立刻释放掉
    (Dispose的动作本身也相当耗费资源)。
    所以你调用Dispose时,你的程序可能会出现明显的迟缓现象。另外强制垃圾回收用 GC.Collect()方法
    下面文章可以作为参考
    ------------------------------------------------
    .NET Framework 开发人员指南
    实现 Dispose 方法类型的 Dispose 方法应释放它拥有的所有资源。它还应该通过调用其父类型的 Dispose 方法释放其基类型拥有的所有资源。该父类型的 Dispose 方法应该释放它拥有的所有资源并同样也调用其父类型的 Dispose 方法,从而在整个基类型层次结构中传播此模式。若要确保始终正确地清理资源,Dispose 方法应该可以被多次调用而不引发任何异常
    ------------------------------------------------
      

  6.   

    你看了如果是dataset的话就就可以是respose() 可以用gc里的方法 应该可以解决 最好不要写read=null 这样不好的
      

  7.   

    .net中的垃圾回收机制 是这样的他在内存中有3个级别的存放空间GC通过一定的时间 对程序中变量进行清理,首先清理1级的内存空间,如果发现变量已经很久没有使用了,就会dispose,
    如果变量一直在使用,就会把这个变量放入2级内存;对2级内存空间 和3级内存空间的操作是一样的道理;
      

  8.   

    read.Dispose();是释放read所占用的托管堆中的存储空间;
    read = null;只是将read对象置为null;但是并没有释放掉托管堆中的内存;也就是说read只是丢掉了句柄而已;
      

  9.   

    if(read != null)
    {
    read.Dispose();
    }
      

  10.   

    通常是不需要写的
    read = null这个不用写.
    read.Dispose();这个也不用写.
    ,要写可以显示的指定垃圾回收机制进行回收。
    不过注意,不能先写
    read=null;
    然后再写read.Dispose();好像会出错。具体情况有点忘记了。是一个项目中发现sqlconnection=null 和
    sqlconnection.disopse()发现的
      

  11.   

    .....建议你看看
    Garbage Collection: Automatic Memory Management in the Microsoft .NET Framework 
    by Jeffrey Richter 
    文章分两部分.google一下就有.
    谢谢.