请教c#方法里申明的对象离开方法后还在内存中吗?
public int selectNum(string sql)
{
SqlConnection conn = new SqlConnection(str);
conn.Open();
cmd.CommandText = sql;
returnNum = int.Parse(cmd.ExecuteScalar().ToString());
conn.Close();
return returnNum;
}
这样写的的话 我调用方法的时候才创建sqlConnection对象,离开的时候会把这个方法从内存中清除吗?
如果这个方法是静态的那又是什么时候创建的?
因为是新手,语言有可笑的地方见谅.
------解决方案--------------------如果把sqlConnection对象换成其他对象的话,就会从内存中清除掉。
但sqlConnection比较特别,离开的时候会自动把该连接放到连接池中去。(除非你在连接字符串上显示声明不使用连接池)
静态的话,会在第一次使用的时候创建(只有第一次的时候创建一次),生命周期和整个应用程序一样。
不过sqlConnection不可能使用静态的,我看到很多人的dbhelper类都把sqlConnection做成静态的。这样的话再同时有2个连接的时候就出问题了。
------解决方案--------------------
要 弄清楚对象的内存分配。
SqlConnection conn = new SqlConnection(str);
1.离开方法时, conn在堆栈上,会被释放。而new SqlConnection(str);会在托管堆中,成为垃圾对象,等待着GC回收。
2. 要显示关闭sqlConnection,sqlConnection本身是托管对象,受GC管理,但是它里面引用到了非托管资源,不受GC管理。