日期:2014-05-17  浏览次数:20573 次

petshop里方法的局部变量
最近没事在看petshop案例,觉得有一点不是很明白。

疑问

SQHelper类下面的ExecuteNonQuery方法里有这句"cmd.Parameters.Clear();"

个人觉得因为cmd这个对象是在方法里声明的,意味着方法执行完之后,它会自动的销毁,这样的话它里面的Parameters应该也会一起销毁掉,那上面这一句是不是有点多余?




  public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {

  SqlCommand cmd = new SqlCommand();

  using (SqlConnection conn = new SqlConnection(connectionString)) {
  PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
  int val = cmd.ExecuteNonQuery();
  cmd.Parameters.Clear();
  return val;
  }
  }


------解决方案--------------------
cmd是方法内定义的局部变量,每次执行方法都会创建新的Parameters,所以个人认为cmd.Parameters.Clear();应该是多余的。
------解决方案--------------------
至少不应该认为是多余的,有几个人会在用完一个实例后,执行dispose呢,都会偷懒交给系统自己去处理,这是很不好的习惯

cmd.Parameters.Clear,可能会调用Parameters的析构函数去释放一些内存,防止内存泄露