coo*_*ish 22 .net c# filestream
MSDN说FileStream.Flush(True)
"还会清除所有中间文件缓冲区."
"所有中间文件缓冲区"到底意味着什么?
Han*_*ant 24
它会将文件系统缓存中缓冲的文件数据写入磁盘.根据磁盘写头的位置,该数据通常是懒惰写入的.拥有一千兆字节的缓存数据在技术上是可行的,因此可能需要一段时间.如果这对您很重要,请考虑使用该FileOptions.WriteThrough
选项.它完全禁用写缓存.这可能非常昂贵; 你会发现硬盘的速度有多慢.
当你打电话Flush()
或者Flush(false)
,FileStream
"复制到文件中的任何数据之前写入缓冲区,并清除缓冲区(除了它的编码器状态)".这里的缓冲区表示FileStream
类的内部缓冲区.并且复制到文件不会将数据写入光盘.它只是将数据传递给操作系统.
但是,Windows操作系统中的IO操作也会被缓冲 - 将数据写入磁盘可能会被推迟,直到系统准备就绪.因此,清除所有中间缓冲区会强制将缓冲数据写入光盘.这里的缓冲区意味着Windows内部缓冲区[文件系统缓存].
BTW关闭文件时,所有缓冲的数据将自动写入光盘.因此,只有在文件句柄关闭之前需要刷新数据时才需要这些东西.