求助我外部调用的释放资源调用方式是
调用 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
}
}
调用 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
}
}
当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。
要达到这样的目的,用try...catch来捕捉异常也是可以的,但用using也很方便。
这不就是using的用处么