Если мне нужно очень часто читать файл, и я загружу файл в вектор беззнакового символа, используя fread, последующий fread действительно быстр, даже если вектор беззнакового символа уничтожается сразу после прочтения.
Мне кажется, что что-то (Windows или диск) кэширует файл, и, таким образом, freads очень быстро. Я ничего не читал об этом поведении, поэтому я не уверен, что на самом деле вызывает это.
Если я не буду использовать свое приложение в течение 1 часа или около того, а затем снова сделаю fread, fread будет медленным. Мне кажется, что кеш освободился.
Может ли кто-нибудь объяснить это поведение мне? Я бы хотел активно использовать его. Это проблема для меня, когда фаза медленная.
Картирование памяти в файл работает теоретически, но сам файл слишком большой, поэтому я не могу его использовать.
90% времени выполнения компьютерной программы расходуется на выполнение 10% кода
Это не правило, но обычно это так, поэтому многие программы пытаются сохранить последние данные, если это возможно, потому что очень вероятно, что эти данные будут доступны в ближайшее время.
ОС Windows не является исключением, после получения команды для чтения файла OS хранит некоторые данные о файле. Он хранит в памяти адреса возрастов, где хранится программа, если возможно, даже хранить некоторую часть (или даже все) двоичных данных в памяти, она делает следующий файл прочитанным намного быстрее, если это чтение сразу после первого.
В целом вы правы, что есть кеширование, но я не могу сказать, что это действительно происходит, поскольку я не работаю в Microsoft...
Также отвечая на следующую часть вопроса. Сопоставление файлов в памяти может быть решением, но если файл очень большой машины, возможно, не имеет много памяти, поэтому это не будет вариант. Однако вы можете использовать закон 90/10. В вашем случае у вас должна быть только часть файла, отображаемого в память (эта часть является самой важной), а также при чтении вы должны составить таблицу данных общих параметров.
Не знаю точной ситуации, но это может спасти.