Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Zufyxe Гость
|
Добавлено: Пн Июл 26 2004 07:21 Заголовок сообщения: Как отключить кэширование файлов в NT? |
|
|
Практически во всех NT-ях драйвер файловой системы при открытии файла кэширует содержимое для ускорения доступа. Таким образом, при чтении из файла, который ранее использовался другим приложением, мы получаем содержимое кэша вместо содержимого диска. Т.е. физического чтения с диска не производиться. То же касается и записи. Так вот, есть ли какие нибудь параметры (флаги) для CreateFile/NtCreateFile, позволяющие работать с файлом на диске не задействуя cache manager? Или может другие варианты? |
|
Вернуться к началу |
|
|
Turkish
Зарегистрирован: 25.07.2004 Сообщения: 15 Откуда: из-за горизонта
|
Добавлено: Пн Июл 26 2004 11:37 Заголовок сообщения: |
|
|
Конкретных флагов указать не могу, но по-моему это описано у Рихтера, ну или посмотреть собственно в winbase.h.
Можно попробовать также такой вариант - работать с проекцией файла. Там кеширование страниц отключить точно можно. _________________ homesite: http://www.320-8080.ru |
|
Вернуться к началу |
|
|
Zufyxe Гость
|
Добавлено: Пн Июл 26 2004 23:33 Заголовок сообщения: |
|
|
Вариант с проекцией отпадает сразу, поскольку Image - это уже и есть отображение файла в памяти. Все операции с Image-ами кэшируются (то есть выполняются через память) по определению. Кроме того, один образ файла в физической памяти может быть одновременно отображен на адресное пространство сразу нескольких процессов Конечно, можно задать атрибуты таким образом, чтобы запретить совмесный доступ к проекции, но тогда теряется смысл всей задачи: организовать чтение из файла минуя кэш файловой системы, и при этом не ограничевая использования файла другими приложениями.
Далее, для проекции файла можно отключить кэширование страниц памяти. Но, дело в том, что кэширование страниц (paging) и cached IO (read ahead/leazy write) - совершенно независимые и различные механизмы.
Насчет Рихтера - спасибо за идею , обязательно посмотрю. |
|
Вернуться к началу |
|
|
GeX
Зарегистрирован: 03.01.2004 Сообщения: 60 Откуда: Россия, Иркутск
|
Добавлено: Ср Июл 28 2004 03:42 Заголовок сообщения: |
|
|
Есть функции, прямой записи на диск, но насколько я помню чтобы ими пользоваиться надо чтобы процесс имел имел привилегии ring 0, т.е. привилегии уровня ядра. Хотя конкретно с этим не разбирался, точно сказать не могу. И вообще, зачем тебе это надо? Кэш хорошая штука, может помнишь как в старом добром MS-DOS-е копируются или удаляются большие кучи файлов без SmartDrive-а |
|
Вернуться к началу |
|
|
|