Существует хороший раздел под названием «Поведение кэширования», который говорит нам, по крайней мере, как вы можете повлиять на кэширование файлов, по крайней мере, в неуправляемом мире.

ированоэтот ответ Мне было интересно, что происходит под занавесом, если использовать многоFileStream.Seek(-1).

Для ясности я перепосту ответ:

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 байтов в буфер и искал в этом буфере символ.

Используя Reflector, я обнаружил, что внутренне метод используетSetFilePointer.

Есть ли документация о кешировании окон и чтении файла в обратном направлении? Буфер Windows "назад" и обращается к буферу при последовательном использованииSeek(-1) или он будет читать вперед, начиная с текущей позиции?

Интересно, что, с одной стороны, большинство людей согласны с тем, что Windows делает хорошее кэширование, но с другой стороны, каждый ответ на «чтение файла в обратном направлении» включает чтение фрагментов байтов и работу с этим фрагментом.

Ответы на вопрос(2)

Ваш ответ на вопрос