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

ldg9tpl 2009-01-28 02:55:34
一个检测用户名是否存在的函数,代码大致如下:
protected bool NameTest(string name)
{
SqlConnection conn = ……;//连接
SqlCommand cmd = ……;//command命令实例
cmd.CommandType = ……;//类型为存储过程
SqlParameter p = ……;//参数
cmd.Parameters.Add(p);//添加参数
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次,这种情况,是不是不释放更好,
因为释放资源又重新分配,如此反复几次反而更浪费时间和资源,对吗?
但这只是我在想像中的猜测,还望高手们给个明确的解释,谢谢!祝新年快乐!
...全文
115 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
C_sdnElf 2009-01-29
  • 打赏
  • 举报
回复
对于应用程序创建的大多数对象,可以依赖垃圾回收器自动执行必要的内存管理任务。但是,非托管资源需要显式清除。最常用的非托管资源类型是包装操作系统资源的对象,例如,文件句柄、窗口句柄或网络连接。虽然垃圾回收器可以跟踪封装非托管资源的托管对象的生存期,但却无法具体了解如何清理资源。创建封装非托管资源的对象时,建议在公共 Dispose 方法中提供必要的代码以清理非托管资源。通过提供 Dispose 方法,对象的用户可以在使用完对象后显式释放其内存。使用封装非托管资源的对象时,应该了解 Dispose 并在必要时调用它。有关清理非托管资源的更多信息和实现 Dispose 的设计模式示例,请参见垃圾回收

网上找的....
xxfflower 2009-01-29
  • 打赏
  • 举报
回复
不用管那么多,你只要知道当你不需要某些资源的时候,调用它的 .Close() 或.Dispose() 就可以了

.NET会自动回收资源的。
宝_爸 2009-01-29
  • 打赏
  • 举报
回复
不用担心,connection即使你在程序中释放了,在sqlserver端也没有释放掉,而是放在连接池中,等待下一个创建同样连接的请求而把这个连接返回。

参见:
http://msdn.microsoft.com/zh-cn/library/8xx3tyca.aspx
ck0311 2009-01-29
  • 打赏
  • 举报
回复
这就看你在性能与资源之间的抉择了!
wuyq11 2009-01-29
  • 打赏
  • 举报
回复
通过 using (SqlConnection connection = new SqlConnection(""))
实现关闭,同时GC会回收。
boxerwg 2009-01-29
  • 打赏
  • 举报
回复
释放都比不释放好
bighead 2009-01-29
  • 打赏
  • 举报
回复
using(SqlCommand cmd =...)
{



}
这样可以自动释放
fengjian_428 2009-01-29
  • 打赏
  • 举报
回复
释放都比不释放好
close释放资源
dispose释放资源外加释放连接字符串
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧