我遇到了一些琐碎的事情,但是当我缓冲的数据达到FileStream缓冲区的大小时,数据似乎被刷新到磁盘(从FileStream的缓冲区中)。
//use the FileStream buffer to actually buffer the data to be written, so segments are written as desired.
FileStream writeStream = new FileStream(filename, FileMode.Append, FileAccess.Write, FileShare.None, CommandOperationBufferSize);
BinaryWriter binWriter = new BinaryWriter(writeStream);
byte[] FullSize = new byte[CommandOperationTotalSize];
//the BinaryWriter will flush when the FileStream buffer is hit
binWriter.Write(FullSize); //DATA FLUSHES TO DISK HERE!
//if wait, wait five seconds
if (CommandOperation == "writewait" || CommandOperation == "appendwait")
{
Thread.Sleep(5000);
writeStream.Flush();
Thread.Sleep(5000);
}
writeStream.Close();
writeStream.Dispose();
binWriter.Close();
有人能证实这是真的吗?当FileStream的缓冲区被填满时,FileStream的缓冲区是实际的。flush () ?
我之所以问,是因为如果我将CommandOperationTotalSize设置为1MB,并将CommandOperationBufferSize设置为64KB,则当缓冲区被填满时,数据将刷新到磁盘。
听起来像我回答了我自己的问题,但似乎奇怪的是,FileStream缓冲区不会溢出?但也许API开发人员是想表现得好一点?
谢谢,马特
您可以很容易地假设缓冲区溢出是不可能的。如果是这种情况,那么类将很难使用,因为FileStream根本没有属性来告诉您当前正在缓冲多少。
缓冲区的存在只是为了减少对本机Windows WriteFile()调用的调用次数。当您写入少量数据时,例如每次写入一个字节,这一点非常重要。如果您没有明确指定缓冲区大小,那么它将使用4096字节的缓冲区。这很好,需要其他东西是非常罕见的。任何写操作都由文件系统缓存进一步缓冲。当您使用FileOptions时,您应该只考虑非标准大小。WriteThrough