求助我外部调用的释放资源调用方式是
调用 Dispose() 还是  Dispose(true)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using System.Data;
using System.Data.SqlClient;
using System.Collections;
using Microsoft.ApplicationBlocks.Data;
namespace ADSearchSYN
{
    public class DbManage:IDisposable
    {        public SqlConnection myConn;
        public SqlConnection myConn1;
        //public SqlConnection myConn2;
                public string conn_string = System.Configuration.ConfigurationManager.ConnectionStrings["Cape9"].ToString();        public int TimerInerval = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["TimerInerval"].ToString());
        public int RegionId = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["RegionId"].ToString());        //public static string XmlSavePath = ApplicationCommon.FixXmlCreateApPath(System.Configuration.ConfigurationManager.AppSettings["XmlSavePath"].ToString());
        //public static string XmlUpdatePath = ApplicationCommon.FixXmlCreateApPath(System.Configuration.ConfigurationManager.AppSettings["XmlUpdatePath"].ToString());
        //public static string XmlBackupPath = ApplicationCommon.FixXmlCreateApPath(System.Configuration.ConfigurationManager.AppSettings["XmlBackupPath"].ToString());   //new add 2011-7-26 temp        //public static string WebPhysicsPath = ApplicationCommon.FixXmlCreateApPath(System.Configuration.ConfigurationManager.AppSettings["WebPhysicsPath"].ToString());        //public static int CreateType = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["CreateType"].ToString());
        //public string StartDate = System.Configuration.ConfigurationManager.AppSettings["StartDate"].ToString();
        //public string LastElaspedTime = System.Configuration.ConfigurationManager.AppSettings["LastElaspedTime"].ToString();        //public int RunTimes = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["RunTimes"].ToString());
        //public int LogFlag = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["LogFlag"].ToString());        //public int Pre_Read_Hours= Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["Pre_Read_Hours"].ToString());        private bool _alreadyDisposed = false;        public DbManage()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
            myConn = new SqlConnection(conn_string);
            myConn1 = new SqlConnection(conn_string);
            //myConn2=new SqlConnection(conn_string);
        }
        /// <summary>
        /// 析构函数
        /// </summary>
        ~DbManage()
        {
            Dispose(false);        }        /// <summary>
        /// Back SqlDataReader Data via Store procedure
        /// </summary>
        /// <param name="stored_procedure_name"></param>
        /// <returns></returns>
        public SqlDataReader GetSqlDataReaderStored(string stored_procedure_name)
        {
            try
            {
                return SqlHelper.ExecuteReader(myConn, CommandType.StoredProcedure, stored_procedure_name);
            }
            finally
            {
                Dispose(); //?调用 Dispose() or Dispose(true)
            }
        }
        #region IDisposable 成员        public void Dispose()
        {
            // TODO:  添加 DbManage.Dispose 实现
            if (myConn != null)
            {
                myConn.Close();
            }
            _alreadyDisposed = true;            Dispose(true);
            GC.SuppressFinalize(true); // as a service to those who might inherit from us
        }        // 虚拟的Dispose方法
        protected virtual void Dispose(bool isDisposing)
        {
            // 不要多次处理
            if (_alreadyDisposed)
                return;
            if (isDisposing)
            {
                // TODO: 此处释放受控资源
                Dispose();
            }
            // TODO: 此处释放非受控资源。设置被处理过标记
            _alreadyDisposed = true;
        }
        #endregion
    }
}

解决方案 »

  1.   

    Dispose()
      

  2.   

    用using
    当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。
    要达到这样的目的,用try...catch来捕捉异常也是可以的,但用using也很方便。
      

  3.   

    不管怎么最终都要调用dispose()啊。那些true false就是为了不做第二次。
      

  4.   


         这不就是using的用处么
      

  5.   

    using就挺好用的嘛
      

  6.   

    直接 using   出了 using{}后,会释放