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的析构函数去释放一些内存,防止内存泄露