当前位置: 代码迷 >> C# >> 关于GC的回收的疑点
  详细解决方案

关于GC的回收的疑点

热度:111   发布时间:2016-05-05 04:38:00.0
关于GC的回收的疑问
看了网上好多GC回收的,感觉越开越晕。
首先,GC的回收是回收托管资源,对于非托管资源需要手动释放。是这样吧。
想判断托管和非托管,感觉好像除了变量,每次用到的一些类都是非托管,
比如file的stream的 数据库的 response之类的搞得我每次都想要dispose了;
然后网上看到析构和dispose又有些茫然,因为自己使用是只是调用一个dispose
并没有说继承IDisposable重写dispose,然后关于析构的Finalize()好像是不建议使用的?
之前一段时间看到某人的java对比C#也才让我好好地了解了一下GC。
那么问题来了?
对于非托管资源的释放问题到底应该怎么样做才是最正确的。
------解决思路----------------------
非托管资源都是通过dispose释放啊,IDisposable只是约定了一个规范而已
------解决思路----------------------
绝大多数的时候,都是托管的。 

基本上是有遇到文件和数据库读写,需要dispose。

并不推荐手动调用关于析构的Finalize(),并且绝大多数情况下析构函数也是不需要写的。
------解决思路----------------------
引用:
Quote: 引用:

绝大多数的时候,都是托管的。 

基本上是有遇到文件和数据库读写,需要dispose。

并不推荐手动调用关于析构的Finalize(),并且绝大多数情况下析构函数也是不需要写的。

那么是不是可以这么理解:
我创建一个数据库连接sql,使用好以后sql.close(),sql.dispose()就可以了
不需要去自己写dispose() 

实际上你写close就足够了
只有你自己写dll的时候可能需要自己实现dispose,现有的类库保证都已经实现了,不需要自己再实现了
  相关解决方案