何时使用Dispose托管资源

513 2003-09-12 06:32:04
用浏览器做客户端的系统,Connection应该是短连接,即每次连接检索完数据后,就断开了.
并且得到的页面也是新的,是无状态的方式.那么我们使用DataSet.Dispose().是否没有必要.我认为托管的资源应该是GC自动管理的,而且是经过优化的.我们每次检索完就Dispose()可能破坏优化,反而可能使性能下降.不知我的观点是否正确,请指点!
...全文
44 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhan2000 2003-09-13
  • 打赏
  • 举报
回复
...Dispose()会自动调用close方法

垃圾回收有不确定性,推荐使用dispose
xz_king 2003-09-13
  • 打赏
  • 举报
回复
有必要,如果10000人同时连接,而你不释放资源,想想当时会有多少RAM被占用。

个人推荐使用:

using( SqlConnection conn = new SqlConnection){
conn.open() ;
...
conn.close() ; // 如果你忘了close, 这个代码结束时,conn也会自动回收了。
....
}
layershow 2003-09-13
  • 打赏
  • 举报
回复
建Connection
.Open();

.Close();
...Dispose()
等等....

只要有了这个操作过程(以上没问题吧?).我再用代码恢复数据库都是说数据库正在被使用
意思是资源没有被释放.
但是一关掉程序,资源马上被释放掉.有兴趣可以试试

假想一个例子
//Connection 完成
Command myCmd = new Command();
myCmd.CommandText = "...";
myCmd.Execute...();
myCmd = new Command();
myCmd.CommandText = "...";
myCmd.Execute...();
myCmd.Dispose();
// 关闭

// Connection
Command myCmd = new Command();
myCmd.CommandText = "...";
myCmd.Execute...();
myCmd.CommandText = "...";
myCmd.Execute...();
myCmd.Dispose();
// 关闭

前一个是建了两个Command实例,而第一个的Dispose没有被显式调用.估计是由GC完成吧?
它的生存期是多长我也不清楚.至少已经没有加在它上面的引用了,这可能也是GC判断是否回收
的一个标准吧?
第二个只建了一个Command实例,并且使用多次,不再使用的时候,才将它释放掉

这是我的理解,我说有点含含糊糊,也请高手指正.
ArLi2003 2003-09-13
  • 打赏
  • 举报
回复
我也觉的有必要,GC 是定时性或者被动解发的

你可以试试在析构里验证一下你清掉那个class 之后要多久才会执行到析构
cnhgj 2003-09-13
  • 打赏
  • 举报
回复
有必要,释放资源
dragonsuc 2003-09-12
  • 打赏
  • 举报
回复
看看Applied Microsoft .NET Framework Programming

你了解更深入
你的看法是正确的

110,531

社区成员

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

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

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