我经常使用以下代码(或类似代码)来处理对象:
SqlCommand vCmd = null;
try
{
// CODE
}
catch(Exception ex) { /* EXCEPTION HANDLE */ }
finally
{
if (vCmd != null)
{
vCmd.Dispose();
vCmd = null;
}
}
这是释放对象和处理对象的最佳方法吗?
我正在使用VS分析并向我发出关于裁员的警告。但我总是这样做......
答案 0 :(得分:4)
就可读性而言,最好的方法是使用using
statement:
using(SqlCommand vCmd = new SqlCommand("...", connection)
{
try
{
// CODE
}
catch(Exception ex)
{
// EXCEPTION HANDLE
}
}
即使出现错误也会处置对象,因此类似于finally
。当对象实现IDisposable
时,您应该始终使用它,这表明它使用非托管资源。
进一步阅读:
答案 1 :(得分:2)
以下是MSDN的一个示例:
private static void ReadOrderData(string connectionString)
{
string queryString =
"SELECT OrderID, CustomerID FROM dbo.Orders;";
using (SqlConnection connection = new SqlConnection(
connectionString))
{
SqlCommand command = new SqlCommand(
queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
try
{
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}",
reader[0], reader[1]));
}
}
finally
{
// Always call Close when done reading.
reader.Close();
}
}
}
注意使用"使用"用于连接。
回到COM / ActiveX的旧日,您需要将对象设置为" Nothing"。
在托管代码中,不再需要这样做。
您既不应该调用" Dispose()",也不应该将您的sqlCommand设置为" null"。
停止使用它 - 并信任.Net垃圾收集器来完成剩下的工作。