• EffectiveC#15--使用using和try/finally来做资源清理


    1.任何时候你在使用一个有Dispose()方法的类型时,你就有责任来调用Dispose()方法来释放资源。

      最好的方法来保证Dispose()被调用的结构是使用using语句或者try/finally块

    public void ExecuteCommand( string connString, string commandString ) 
    {   using ( SqlConnection myConnection = new SqlConnection( connString )) 
          { using ( SqlCommand mySqlCommand = new SqlCommand(   commandString, myConnection )) 
                { 
                 myConnection.Open(); 
                 mySqlCommand.ExecuteNonQuery();
                } 
            } 
    }
    

      翻译者认为上述结构问题在于无法捕获异常。建议如下写法,作者本人和译者相同。

    public void ExecuteCommand( string connString, string commandString ) 
    { 
    SqlConnection myConnection = null; SqlCommand mySqlCommand = null; try
    {
    myConnection = new SqlConnection( connString ); mySqlCommand = new SqlCommand( commandString, myConnection ); myConnection.Open(); mySqlCommand.ExecuteNonQuery(); }
    catch
    {} finally { if ( mySqlCommand != null ) //注意这里判断对象是否为null是很重要的一些封装了COM的对象,有些时候的释放是隐式的,当你再释放一些空对象时会出现异常 mySqlCommand.Dispose(); if ( myConnection != null ) myConnection.Dispose(); } }

    sqlconnection它还有close(),Dispose方法会释放更多的资源,它还会告诉GC,这个对象已经不再须要析构了

    2.使用或包含非托管资源的类型必须实现IDisposable接口的Dispose()方法来精确的释放系统资源。

  • 相关阅读:
    算法提高---概率计算
    全排列
    算法提高 最小方差生成树
    【洛谷】P1040 加分二叉树
    SPAF模板
    Bellman-Ford算法(有向图)
    Floyd算法
    Dijkstra算法
    蓝桥杯算法提高 递推求值 【矩阵快速幂】
    【动态规划】数字分组I
  • 原文地址:https://www.cnblogs.com/tiantianle/p/4890246.html
Copyright © 2020-2023  润新知