2013-03-14 2 views
0

Я написал программу, которая загружает файлы, и мне интересно, может ли кто-нибудь объяснить, почему загрузка файла вторая & последующие времена быстрее начальной загрузки одного и того же файла?
Например:
1. При загрузке большого файла (500 МБ) в первый раз требуется больше времени, чем последующая загрузка одного и того же файла. Это займет примерно половину времени при загрузке файла 2 nd времени.
Это случай, даже если объем использования ОЗУ падает (это также появляется при перезапуске программы).

2. Если я перезагружу свой компьютер и/или не запускаю программу или перезагружаю файл через некоторое время, ситуация № 1 встречается снова.Память и загрузка файла C++?

Окружающая среда:

  • C++
  • VS 2010 (MFC)
  • Windows XP Home 32-разрядное
  • загрузка файла: Я попытался Fread() & другие, но все они заканчиваются аналогичными результатами.

Спасибо за понимание.

+0

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

+0

Да и земля поднимается и садится, но люди все еще говорят о закате и восходе солнца. Может быть очевидным, но другим это может и не быть. Так много для такого понятия, как глупый вопрос ха-ха. В любом случае, я благодарен тем, кто ответил. Cheers :) – ReturnVoid

+0

Да, не означает, что ответ был очевиден, но это очевидно для меня. Я думал, может быть, это считалось «слишком очевидным» для некоторых людей? Может быть? (Измените вопросительный знак на свой вопрос.) (Также земля не поднимается и не устанавливается. Она вращается) –

ответ

5

Ваша операционная система будет кэшировать файлы в неиспользуемой памяти. См. wikipedia. Это исчезнет после перезагрузки, или если вы используете много памяти или откроете еще много файлов. Информация зависит от вашей операционной системы.

Для более широкого обзора современной компьютерной архитектуры this talk от Herb Sutter.

+0

Мысль о том, что это может быть так, но не был уверен. Спасибо за ссылки тоже. Есть ли способ кэшировать файл перед его загрузкой или что-то подобное, чтобы ускорить загрузку файлов? – ReturnVoid

+0

Вы можете обмануть его, просмотрев его через интервал ~ = размер страницы, но ваша ОС может решить не кэшировать его и не выкидывать его, прежде чем использовать его. В Linux лучшим вариантом будет, вероятно, сделать RAM-диск и скопировать файл в него. –

+0

Очевидно, я должен добавить, что длина, требуемая для загрузки файла, в первый раз связана с загрузкой в ​​кеш - вы не можете заставить это исчезнуть. Вы можете скрыть задержку, загрузив файл асинхронно, пока вы делаете другие вещи. (Это еще один вопрос :)) –

1

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

+3

Кэш на типичном жестком диске составляет около 32 МБ (больше для SSD.), В то время как это определенно важно, возможно, даже не попадает на второй загрузчик. Операционная система, скорее всего, кэшируется в оперативной памяти. –

+1

Хорошая точка. +1 на ваш ответ. –

0

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

+0

это, вероятно, не кеш жесткого диска, который дает эти сбережения. –

1

В современной операционной системе нет такой вещи, как «неиспользуемая память». Это будет пустой тратой. Что делает ОС, так это то, что он хранит копии файлов, структур каталогов, метаданных файлов [например, где на диске находятся данные для данного файла] и других полезных данных в «неиспользуемой» памяти.

Поэтому, когда вы читаете файл, он загружается в память. Предполагая, что достаточно «неиспользуемой» памяти, этот файл действительно будет сидеть там долгое время. В конце концов, это, вероятно, выйдет из строя, потому что при нормальном использовании вашего компьютера, программного обеспечения электронной почты, веб-браузера, индексатора файлов, антивирусного сканера, сетевого синхронизатора времени, адресной книги для синхронизации мобильного телефона и всего остального кода фона который работает в вашей системе, и все эти вещи будут использовать немного «неиспользуемой» памяти.

Итак, да, файлы кэшируются. 500 МБ-файл в системе с 4 или 8 ГБ ОЗУ и не использует всю эту оперативную память, потенциально будет сидеть там минут, часов или даже дней.

Смежные вопросы