C#程序释放资源的问题?谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/07 15:24:52
一个检测用户名是否存在的函数,代码大致如下:
protected bool NameTest(string name)
{
SqlConnection conn = ……;//连接
SqlCommand cmd = ……;//command命令实例
conn.Open();
int count = Convert.ToInt32(cmd.ExecuteScalar());//返回记录数
if (count > 0)
{
return true;
}
else
{
return false;
}
conn.Close();
//获取记录数后释放资源
cmd.Dispose();
conn.Dispose();
}

提交注册,代码大致如下:
protected void Button1_Click(object sender, EventArgs e)
{
//代码略,在此代码块中,因为有需要,示情况会调用NameTest()函数2至3次
}

我对程序运行原理懂得很少,请问在NameTest()函数代码块中,要不要给cmd和conn两个对象释放资源,我想如果该函数只
被调用一次的话,理所当然要释放,但实际应用中,仅仅提交注册这个动作瞬间就要调用2-3次,这种情况,是不是不释放更好,
因为释放资源又重新分配,如此反复几次反而更浪费时间和资源,对吗?
但这只是我在想像中的猜测,还望高手们给个明确的解释,谢谢!祝新年快乐!

GC,一个服务CLR的。有两个特点,前人的总结。但不是scott他们说的。我是这么翻译的:
1.当程序不再运行的时候,GC可以从内存中删除对象。
2.GC在原则上释放那些不得不释放的程序任务,比如释放你所要求的释放(dispose)的和造成内存溢出的程序。
实际上我认为在服务器上打上framwork2.0的补丁为前提下,你必修写上dispose.而且要是你参照一些个翻译错误的书来写,你吃的亏会很大。为什么?问题在于你所开发的系统上了2000流量,若是电子商务网站,弄不好将因为你的造成的事故而死去。一天损失上万。所以,服务器内存释放你必须考虑下。否则后果自负。自己写个类吧!
公司老大格言,.net 是个框,你要在已经打上桩的框中编写你自己的未来(实际vs并不美好)
"写" 请自己参考CLR

不用,因为在c#中,在我们操作问以后,程序会自动释放资源.当然,我们如果手动释放这是个好习惯.

如果cmd和conn要频繁的使用 倒不如声明为类中的全局变量 这样运行程序只需要初始化一次 释放一次
比如这样
class Form1
{
....
SqlConnection conn = ……;
SqlCommand cmd = ……;

void Function1()
{
cmd.xxx;
}

}

如果只是偶尔用一下 用过之后就Dispose掉比较节省资源

其实你可以把数据库访问相关函数写到一个类中,要访问时调用这个类的相关函数就可以了,不用每次都去写这些代码。C#会自动释放资源,这个不用太担心,他们的生存期到了,自然会回收,当然写上也没问题,资源不用就释放,我觉得应该这样,下次用下次再分配。但是你的OPEN和CLOSE等最好是要加上捕捉错误的代码,因为网络等原因,可能导致访问的失败。