看了网上好多GC回收的,感觉越开越晕。
首先,GC的回收是回收托管资源,对于非托管资源需要手动释放。是这样吧。
想判断托管和非托管,感觉好像除了变量,每次用到的一些类都是非托管,
比如file的stream的 数据库的 response之类的搞得我每次都想要dispose了;
然后网上看到析构和dispose又有些茫然,因为自己使用是只是调用一个dispose
并没有说继承IDisposable重写dispose,然后关于析构的Finalize()好像是不建议使用的?
之前一段时间看到某人的java对比C#也才让我好好地了解了一下GC。
那么问题来了?
对于非托管资源的释放问题到底应该怎么样做才是最正确的。
------解决思路----------------------
非托管资源都是通过dispose释放啊,IDisposable只是约定了一个规范而已
------解决思路----------------------
绝大多数的时候,都是托管的。
基本上是有遇到文件和数据库读写,需要dispose。
并不推荐手动调用关于析构的Finalize(),并且绝大多数情况下析构函数也是不需要写的。
------解决思路----------------------
实际上你写close就足够了
只有你自己写dll的时候可能需要自己实现dispose,现有的类库保证都已经实现了,不需要自己再实现了