什么时候使用block调用dispose方法

imb*_*a22 2 c# asp.net-mvc c#-4.0

我试图通过输入断点来测试这段代码.我想确保在使用块之后调用dispose方法并且优雅地释放资源(SqlCommand).然而在使用区块中我没有任何处置?

    using (SqlCommand command = new SqlCommand(queryString, connection))
{
    command.CommandType = CommandType.Text;
    command.Parameters.Add("@OrganizationID", SqlDbType.Int);
    command.Parameters["@OrganizationID"].Value = organizationId;
    connection.Open();
    SqlDataReader sqlDataReader = command.ExecuteReader(CommandBehavior.CloseConnection);

    try
    {
        while (sqlDataReader.Read())
        {
            //do something 
        }
    }
    finally
    {
        sqlDataReader.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 5

到呼叫DisposeIDisposable所述后会发生using块已经(即,通过一个例外)执行完毕,正常或异常.

在源代码级调试器中捕获调用的唯一方法是在拥有源代码时IDisposable- 在您的情况下,它将是SqlCommand类的源代码.

检查其工作方式的一种简单方法是创建自己的IDisposable实现,将其放入using块中,并观察其行为.调用Dispose应该在using块完成后立即跟随.