Using sr As New StreamReader(FileName, System.Text.Encoding.Default)
                    Me.txtDataName.Text = dataName
                    Me.Tec.Text = Me.Tec.Text & sr.ReadToEnd.Trim
                    sr.Close()
  End Using
这个using 结构中的sr.Close() 还需要嘛?今天用了FxCop检测之后 提示 contains possible code paths that dispose 'sr' multiple times. Change this behavior so that Close or Dispose is only called once or ensure that the Dispose implementation of ''sr'' is reentrant." 意思应该是重复 Close or Dispose 了?

解决方案 »

  1.   

    继承IDisponse接口的?那我就直接直接用事继承了还是没继承呢?
      

  2.   

    using结构在编辑时会被转化为try...catch...finally 结构,如果using的对象实现了 IDisponse结构,那么finally会自动调用对象的析构函数。
      

  3.   

    不需要,它包含自动释放资源的方法 DIsopose
      

  4.   

    使用了using()的时候  不需要再写close, 
    因为 如果using的对象没有实现了IDisponse结构,会编译通不过的。
      

  5.   

    知道了 以前都是习惯写个sr.Close() 现在看来是没必要了
      

  6.   

    虽然书上总说写using好。但我还是觉得不用using好。
    比如绘图
    using(Graphics g = this.CreateGraphics())
    {
        using(Pen p = new Pen(Color.Black,2))
        {
            g.DrawLine(p,0,0,100,100);
        }
    }这样明显很累赘。缩进太多了。
      

  7.   


    你就不该new。Pen用Pens里的, g用e里面的。
    否则不断的new, 不断的dispose, 消耗也不小。
      

  8.   

    最好还是要加上,并且要加上异常处理,不然出现异常using内部据执行不到结尾,更别说自动释放了
      

  9.   


    using(Graphics g = this.CreateGraphics())
    {
      using(Pen p = new Pen(Color.Black,2))
      {
        g.DrawLine(p,0,0,100,100);
      }
    }'累赘点没关系 这样排列起来也不难看 关键.net程序内存耗的太厉害了
      

  10.   


    和内存一点关系都没有,using是微软想提供的一个语法糖而已。但显然就是个多余的废品。
    如果你觉得2层嵌套没关系。如果绘图时候,先用TexttureBrush填充底图,然后在地图上用另一个TexttureBrush绘制一块区域,在这个区域上绘制一条线宽是2的线,以及绘制一个TexttureBrush填充的文字。你还觉得这样不难看么?就像我们ShowDialog的返回希望翻过来写避免更多的括号一样。OpenFileDialog dlg ...
    if(dlg.ShowDialog() != DialogResult.OK) return;缩进的过多显然是不明智的选择,而且这个释放,为什么要那么累赘的写using,自己写dispose不是很好么?
      

  11.   


    借宝地问一下 using (DbCommand dbCommand = dbConnection.CreateCommand())
        {
           dbCommand.CommandText = sentence;
            //操作超时时间,目前设置为3分钟
            dbCommand.CommandTimeout = 180;
             if (parameters != null)
            {
               dbCommand.Parameters.AddRange(parameters);
             }
               dbConnection.Open();//这开了,是不是后面也不要再Close()了吧
               return dbCommand.ExecuteNonQuery();
         }
      

  12.   


    问的好
    需要的。否则你需要再用using扩一层。
      

  13.   

    用完不用了。就调用dbConnection.Close();