FileStream.Seek vs. Буферизованное чтение

Мотивированный этим ответом мне было интересно, что происходит под занавесом, если использовать много 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 и обратном чтении файла? Выполняет ли Windows буферизацию «в обратном направлении» и обращается к буферу при использовании последовательного Seek (-1) или будет читать вперед, начиная с текущей позиции?

Интересно, что, с одной стороны, большинство людей согласны с Windows делает хорошее кеширование, но, с другой стороны, каждый ответ на " теперь это отлично работает для пользователей одного домена1 (где он размещен), но для пользователей другого домена (домен2) они получают приглашение ввести свои учетные данные Windows, и если они вводят его, тогда он работает, и они могут получить доступ к сайту без каких-либо проблем. но я бы хотел избежать этого запроса на вход, потому что я предоставил доступ группам обоих доменов. почему они получают это приглашение и можно ли его подавить? мне нужно что-то настроить в IIS или web.config для этого? Заранее спасибо.

8
задан RKP 6 December 2010 в 17:43
поделиться