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
}