Информация об изменениях

Сообщение [Core] Отключение кеширования файлов на ОС-уровне. от 15.05.2019 18:13

Изменено 15.05.2019 18:39 VladCore

Отключение кеширования файлов на ОС-уровне.
В Windows кто не в курсе отключить кеширование и чтения и записи можно в конструкторе FileStream секретной опцией:

const int FILE_FLAG_NO_BUFFERING = 0x20000000;
using (var stream = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read, buffer.Length,
    (FileOptions) FILE_FLAG_NO_BUFFERING | FileOptions.WriteThrough))
{
   ....
}

Думаю это только и только в Windows.

Пока писал вопрос нагуглил что в линуксе нужно передавать O_DIRECT
# define O_DIRECT 040000

но есть ограничения: https://stackoverflow.com/a/4705680

Напомните кто gcc помнит 040000 — это по-нашему (шучу) будет 0x4000?

Интересно а в линуксе можно одновременно и FileOptions.WriteThrough и O_DIRECT передавать в опициях?

Для Windows лично проверял. Для линукса только что нашел.

P.S. И чтоб два раза "не вставать" на macOS все сложнее: https://stackoverflow.com/a/2307055
Отключение кеширования файлов на ОС-уровне.
В Windows кто не в курсе отключить кеширование и чтения и записи можно в конструкторе FileStream секретной опцией:

const int FILE_FLAG_NO_BUFFERING = 0x20000000;
using (var stream = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read, buffer.Length,
    (FileOptions) FILE_FLAG_NO_BUFFERING | FileOptions.WriteThrough))
{
   ....
}

Думаю это только и только в Windows.

Пока писал вопрос нагуглил что в линуксе нужно передавать O_DIRECT
# define O_DIRECT 040000

но есть ограничения: https://stackoverflow.com/a/4705680

Напомните кто gcc помнит 040000 — это по-нашему (шучу) будет 0x4000?

Интересно а в линуксе можно одновременно и FileOptions.WriteThrough и O_DIRECT передавать в опициях?

Для Windows лично проверял правда только в .NET Framework. Для линукса только что нашел.

P.S. И чтоб два раза "не вставать" на macOS все сложнее: https://stackoverflow.com/a/2307055