我从阅读微软留档中知道IDisposable
接口的“主要”用途是清理非托管资源。
对我来说,“非托管”意味着数据库连接、套接字、窗口句柄等,但是,我已经看到代码中实现了Dispose()
方法来释放管理资源,这对我来说似乎是多余的,因为垃圾收集器应该为你处理这些。
例如:
public class MyCollection : IDisposable{private List<String> _theList = new List<String>();private Dictionary<String, Point> _theDict = new Dictionary<String, Point>();
// Die, clear it up! (free unmanaged resources)public void Dispose(){_theList.clear();_theDict.clear();_theList = null;_theDict = null;}}
我的问题是,这是否会使MyCollection
使用的垃圾收集器空闲内存比正常情况下更快?
编辑:到目前为止,人们已经发布了一些使用IDisposable
清理非托管资源(例如数据库连接和位图)的好例子。但是假设上面代码中的_theList
包含一百万个字符串,并且您想释放该内存现在,而不是等待垃圾回收器。上面的代码会实现吗?