Файл блокировки Windows C ++ в памяти

0

Если мне нужно очень часто читать файл, и я загружу файл в вектор беззнакового символа, используя fread, последующий fread действительно быстр, даже если вектор беззнакового символа уничтожается сразу после прочтения.

Мне кажется, что что-то (Windows или диск) кэширует файл, и, таким образом, freads очень быстро. Я ничего не читал об этом поведении, поэтому я не уверен, что на самом деле вызывает это.

Если я не буду использовать свое приложение в течение 1 часа или около того, а затем снова сделаю fread, fread будет медленным. Мне кажется, что кеш освободился.

Может ли кто-нибудь объяснить это поведение мне? Я бы хотел активно использовать его. Это проблема для меня, когда фаза медленная.

Картирование памяти в файл работает теоретически, но сам файл слишком большой, поэтому я не могу его использовать.

Теги:
caching
filesystems
fread

1 ответ

2

Закон 90/10

90% времени выполнения компьютерной программы расходуется на выполнение 10% кода

Это не правило, но обычно это так, поэтому многие программы пытаются сохранить последние данные, если это возможно, потому что очень вероятно, что эти данные будут доступны в ближайшее время.

ОС Windows не является исключением, после получения команды для чтения файла OS хранит некоторые данные о файле. Он хранит в памяти адреса возрастов, где хранится программа, если возможно, даже хранить некоторую часть (или даже все) двоичных данных в памяти, она делает следующий файл прочитанным намного быстрее, если это чтение сразу после первого.

В целом вы правы, что есть кеширование, но я не могу сказать, что это действительно происходит, поскольку я не работаю в Microsoft...


Также отвечая на следующую часть вопроса. Сопоставление файлов в памяти может быть решением, но если файл очень большой машины, возможно, не имеет много памяти, поэтому это не будет вариант. Однако вы можете использовать закон 90/10. В вашем случае у вас должна быть только часть файла, отображаемого в память (эта часть является самой важной), а также при чтении вы должны составить таблицу данных общих параметров.

Не знаю точной ситуации, но это может спасти.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню