C# 我应该在控制台应用程序中使用析构函数还是IDisposable
基本上,我在应用程序启动时打开一个数据库连接,它应该一直保持打开状态,直到应用程序的生命周期结束 我正在使用控制台应用程序执行此后台作业:C# 我应该在控制台应用程序中使用析构函数还是IDisposable,c#,C#,基本上,我在应用程序启动时打开一个数据库连接,它应该一直保持打开状态,直到应用程序的生命周期结束 我正在使用控制台应用程序执行此后台作业: class Program { #region '----- Method(s) -----' static void Main(string[] args) { } ~Program() { } #endregion
class Program
{
#region '----- Method(s) -----'
static void Main(string[] args)
{
}
~Program()
{
}
#endregion
}
我应该在析构函数中关闭数据库连接还是实现IDisposable?使用
IDisposable
最好的方法是在一个实例中实例化它
Hm。您不需要或终结器,也不需要IDisposable。您必须这样做:
static void Main(string[] args)
{
db.Dispose();//In the end of console app executing code
}
相信我,你不想这样做,最好的做法是只在需要时使用连接并尽快关闭。如果您需要的是一个事务,那么您可以使用一个Sql事务,并将方法放在使用Sql事务中
using(SqlConnection sqlconn= new ())
using(SqlTransaction sqltrann = new ())
{
{
method1
method 2
}
}
您可以在这里实现dispose模式,这是可取的。否则,请确保您从
CriticalFinalizerObject
继承了实际类型,以便强制CLR将您的类型实例置于终结队列中,而不考虑运行时条件
class Program:CriticalFinalizerObject
{
#region '----- Method(s) -----'
static void Main(string[] args)
{
}
~Program()
{
}
#endregion
}
是的,但我需要跨方法的数据库连接。所以使用它是行不通的。我需要它作为一个实例变量。@Jaggu-您可以将连接传递给不同的方法。不确定在使用连接时使用实例变量是一个好主意。框架会调用我的dispose方法吗?如果我在dispose中关闭连接,因为它需要显式调用。@Jaggu-连接类在被释放时关闭。如果您自己实现了
IDisposable
,请在连接上调用Dispose
。如果用户按ctrl+c或单击窗口上的“关闭”按钮,这是否有效?
class Program:CriticalFinalizerObject
{
#region '----- Method(s) -----'
static void Main(string[] args)
{
}
~Program()
{
}
#endregion
}