是否应该在必须在finally块中执行的try块中使用函数

Sha*_*pta 1 c# performance try-catch

try
{
  OpenConnection();
  RowsAffected = cmd.ExecuteNonQuery(); 
  CloseConnection(true); //should I use this function call here 
  //as well, when I am using it in finally 
  //block. For closing database connection.
}
catch (SqlException ex)
{ throw ex; }
finally
{ CloseConnection(true); }
Run Code Online (Sandbox Code Playgroud)

或者我应该这样写

try
{
  OpenConnection();
  RowsAffected = cmd.ExecuteNonQuery(); 
}
catch (SqlException ex)
{ throw ex; }
finally
{ CloseConnection(true); }
Run Code Online (Sandbox Code Playgroud)

San*_*zen 8

不,无论try块中代码的成功或失败,始终执行finally 块.在您的第一个示例中,连接将在成功时关闭两次.

您说您正在检查连接状态,这意味着在关闭连接两次时不会出现异常.不过,我认为仅在必要时尝试关闭它更合适.

  • 最近我遇到了一些琐事 - 最后块不会*总是*被调用.请参阅Environment.FailFast(http://msdn.microsoft.com/en-us/library/ms131100.aspx) (2认同)