Чтение файла с помощью FileStream и FILE_FLAG_NO_BUFFERING

Немного предыстории: ямы экспериментировали с использованием флага FILE_FLAG_NO_BUFFERING при выполнении операций ввода-вывода с большими файлами. Мы'пытаемся уменьшить нагрузку на менеджер кэша в надежде, что с фоновым вводом-выводом мыуменьшит влияние нашего приложения на пользовательские машины. Производительность не проблема. Нахождение за кулисами как можно больше - большая проблема. У меня есть работающая оболочка для выполнения небуферизованного ввода-вывода, но я столкнулся со странной проблемой. Я получаю эту ошибку при вызове Read со смещением, не кратным 4.

Ручка не поддерживает синхронные операции. Возможно, потребуется изменить параметры конструктора FileStream, чтобы указать, что дескриптор был открыт асинхронно (то есть он был открыт явно для перекрывающегося ввода-вывода).

Почему это происходит? И это не 'не противоречит ли это сообщение? Если я добавлю опцию Асинхронный файл, я получу IOException (параметр неверен.)

Я думаю, реальный вопрос в том, что делают эти требования,http://msdn.microsoft.com/en-us/library/windows/desktop/cc644950%28v=vs.85%29.aspx, имеют отношение к этим кратным 4.

Вот код, который демонстрирует проблему:

FileOptions FileFlagNoBuffering = (FileOptions)0x20000000;
int MinSectorSize = 512;
byte[] buffer = new byte[MinSectorSize * 2];
int i = 0;
while (i < MinSectorSize)
{
    try
    {
        using (FileStream fs = new FileStream(@"", FileMode.Open, FileAccess.Read, FileShare.None, 8, FileFlagNoBuffering | FileOptions.Asynchronous))
        {
            fs.Read(buffer, i, MinSectorSize);
            Console.WriteLine(i);
        }
    }
    catch { }
    i++;
}
Console.ReadLine();

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

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