Dispose主要用于释放宝贵的非托管资源。例如文件,如果你不Dispose的话是不会只动Flush和关闭的。Dispose不能做实质的内存回收(除了非托管资源),它“释放”托管资源的意思是:
1、把指向托管资源的引用放掉(置为null);
2、托管的内存回收是垃圾收集器(GC)完成的,这不由Dispose方法控制。
即使垃圾收集器调用了,程序的内存占用还是不一定减少,公共语言运行时(CLR)并不会立刻把内存还给操作系统,例如CLR可以开30MB内存,然后你用的时候它随时可以分配,而不必向操作系统请求,那样太慢。换言之,你的内存可能被CLR标记为“未使用”,然后等待下一轮分配内存的任务。
关于更多内容,你可以在网络上搜索“.NET 垃圾回收机制”等内容。
补充:如果Stream已经是不可达对象(垃圾),在垃圾收集器回收Stream的内存之前,会调用其析构方法。这个析构方法回去调用Dispose方法,从而回收非托管资源。