动力this answer我想知道如果使用大量的FileStream.Seek(-1)
,幕下会发生什么。FileStream.Seek与缓冲读取
为清楚起见,我会重新发布了答案:
using (var fs = File.OpenRead(filePath))
{
fs.Seek(0, SeekOrigin.End);
int newLines = 0;
while (newLines < 3)
{
fs.Seek(-1, SeekOrigin.Current);
newLines += fs.ReadByte() == 13 ? 1 : 0; // look for \r
fs.Seek(-1, SeekOrigin.Current);
}
byte[] data = new byte[fs.Length - fs.Position];
fs.Read(data, 0, data.Length);
}
个人而言,我会像读2048个字节到缓冲区和搜索的字符该缓冲区。
使用反射器我发现内部方法是使用SetFilePointer。
是否有任何关于Windows缓存和向后读文件的文档? Windows缓冲“向后”并在连续使用Seek(-1)
时咨询缓冲区,还是从当前位置开始预读?
有趣的是,一方面大多数人都赞同Windows做好缓存,但另一方面,“向后读取文件”的每个答案都涉及读取字节块并在该块上进行操作。
做一些认真的同行评审吧? – ChaosPandion 2010-12-06 20:05:53
@ChaosPandion:我没有评价你的评论,我只是好奇。 – VVS 2010-12-06 21:26:55