看看Applied Microsoft .NET Framework Programming你了解更深入
你的看法是正确的

解决方案 »

  1.   

    我也觉的有必要,GC 是定时性或者被动解发的你可以试试在析构里验证一下你清掉那个class 之后要多久才会执行到析构
      

  2.   

    建Connection
    .Open();

    .Close();
    ...Dispose()
    等等....只要有了这个操作过程(以上没问题吧?).我再用代码恢复数据库都是说数据库正在被使用
    意思是资源没有被释放.
    但是一关掉程序,资源马上被释放掉.有兴趣可以试试假想一个例子
    //Connection 完成
    Command myCmd = new Command();
    myCmd.CommandText = "...";
    myCmd.Execute...();
    myCmd = new Command();
    myCmd.CommandText = "...";
    myCmd.Execute...();
    myCmd.Dispose();
    // 关闭// Connection 
    Command myCmd = new Command();
    myCmd.CommandText = "...";
    myCmd.Execute...();
    myCmd.CommandText = "...";
    myCmd.Execute...();
    myCmd.Dispose();
    // 关闭前一个是建了两个Command实例,而第一个的Dispose没有被显式调用.估计是由GC完成吧?
    它的生存期是多长我也不清楚.至少已经没有加在它上面的引用了,这可能也是GC判断是否回收
    的一个标准吧?
    第二个只建了一个Command实例,并且使用多次,不再使用的时候,才将它释放掉这是我的理解,我说有点含含糊糊,也请高手指正.
      

  3.   

    有必要,如果10000人同时连接,而你不释放资源,想想当时会有多少RAM被占用。个人推荐使用:using( SqlConnection conn = new SqlConnection){
        conn.open() ;
    ...
        conn.close() ; // 如果你忘了close, 这个代码结束时,conn也会自动回收了。
    ....
    }
      

  4.   

    ...Dispose()会自动调用close方法垃圾回收有不确定性,推荐使用dispose