C#中 Flush Dispose和Close的区别!

【个人学习过程记录,不一定准确】

想知道,C#中的文件缓冲的 流是什么意思?Flush() 执行的时候,究竟做了什么,流程是什么啊 缓冲区干嘛的

你写了一个程序,其中要对硬盘上的一个文件操作,FileStream fs = new FileStream(fileName)
这样就是建立了一个文件缓冲流,换句话的意思就是说你通过这条程序,计算机给了一一块内存空间,但是呢这块内存空间不是你想干什么就干涉么的,他是专门存fileName这个文件里面的内容的,内存空间的大小,和其他信息,简单地操作时没有办法访问的。当你要从文件里面读取一个Int整数的时候,程序做的不仅仅是读取一个int型整数,他会把该数据附近的一大块数据都读出来放在刚才的那块空间中,为什么这么做呢,因为CPU访问硬盘比访问内存慢多了,所以一开始读出很多的数据,后面需要使用的时候直接使用读出来的,就防止了再次访问硬盘
相应的,你要网文件里面写入数据,也是先存到这个内存里,等存的东西足够多了,或者过了足够的时间,系统一次性把内容写入硬盘。
Flush的作用就是强制执行了一次把数据写出硬盘,这样,你写入的数据确实到了文件中,否则如果程序突然中断,你要写入的内容也许还没写到文件中,就造成了数据丢失。

C#中Dispose和Close的区别!

对C#中的Close()和Dispose()的浅显理解

(这个不是StreamWriter?StreamWriter是重写的,StreamWriter在Close之后就释放了,MSDN写了会调用Dispose释放所有资源)

 Close后连接可以再次打开;而Dispose后连接字串被清空,连接不能再打开

 综上,关于它俩,得出浅显结论:

  1、Close负责关闭业务,Dispose负责销毁对象。Dispose会负责Close的一切事务,额外还有销毁对象的工作,即Dispose包含Close

  2、当你有明确需求的时候,不要混用二者

  3、两者连在一起用没什么意义。要么关闭~以便再次使用,要么销毁~不再使用




close暂时关闭
关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。不直接调用此方法,而应确保流得以正确释放。
flush把写在缓冲区的内容写入文件
清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流。
dispose清理内存 
释放由 System.IO.Stream 使用的所有资源。


 文件句柄当然要清理,非托管资源不及时清理会导致内存泄露 

猜你喜欢

转载自blog.csdn.net/sinat_37519884/article/details/79281300