我应该在控制台应用程序中使用析构函数或IDisposable

时间:2011-10-20 09:11:40

标签: c#

基本上我在应用程序启动时打开一个数据库连接,它应该保持打开状态直到应用程序的生命周期。

我正在使用控制台应用程序来完成这个后台工作:

class Program
    {
        #region '----- Method(s) -----'
        static void Main(string[] args)
        {

        }

        ~Program()
        {

        }
        #endregion
    }

我应该在析构函数中关闭数据库连接还是应该实现IDisposable?

4 个答案:

答案 0 :(得分:2)

使用IDisposable

这样做的最佳方法是在using statement内实例化。

using (var conn = new SqlConnection(connectionString)) 
{
    // your code here
}

答案 1 :(得分:2)

相信我,你不想这样做,最佳实践说只在需要时使用连接并尽快关闭它。如果您需要的是一个事务,那么您可以使用Sql事务并将方法放在使用sql Transaction

using(SqlConnection sqlconn= new ())
   using(SqlTransaction sqltrann = new ())
{
  {    
     method1
     method 2
  }
}

答案 2 :(得分:1)

嗯..如果你没有创建程序类的实例,那么它不需要终结器,因为终结器仅被调用为对象的实例。你既不需要也不需要Finalizer,也不需要IDisposable。你必须这样做:

static void Main(string[] args)
{
    db.Dispose();//In the end of console app executing code
}

答案 3 :(得分:1)

您可以在此处实施dispose模式,这是可取的。否则,请确保从CriticalFinalizerObject继承实际类型,以便强制CLR将类型实例放置在最终化队列中,而不管运行时条件如何。

class Program:CriticalFinalizerObject
 {
        #region '----- Method(s) -----'
        static void Main(string[] args)
        {

        }

        ~Program()
        {

        }
        #endregion
}