Отказ от ответственности: я очень мало знаю об управлении памятью или производительности, и я пишу на C #.
Вопрос:
"кэширует" ли данные среднего размера (порядка, скажем, десятки МБ), особенно media , которые будут отправляться в любое время на устройство (аудио и изображения), на диске (вместо того, чтобы «хранить его в (виртуальной) памяти»), перед лицом того факта, что любая ОС будет перезаписывать (возможно, «страница» - правильное слово) неиспользуемую память на диск?
Возможно, это не совсем понятно, поэтому я выложу примеры.
В основном это связано с пользовательскими интерфейсами, а не с сетевым вводом-выводом .
Примеры того, о чем я говорю:
- Приложение FooSlideshow может хранить слайды на диске вместо того, чтобы выделять для них виртуальную память.
- BarGame может хранить звуки различных, многочисленных событий на диске и загружать их для воспроизведения.
- BazRenderer может хранить растровые изображения нескольких слоев в составном изображении, если они не подвержены постоянному изменению (если изменяется только один слой, остальные нужно просто прочитать с диска).
Примеры того, о чем Я не говорю:
- FooPlayer кэширует буфер песни во время потоковой передачи с сервера.
- BarBrowser кэширует изображения, потому что пользователь может посетить одну и ту же страницу.
Почему я должен заботиться:
Потому что, скажем, в режиме слайд-шоу при отображении в полноэкранном режиме на экране 1024x768 с 32 битами на пиксель 1024 * 768 * 32 байта = 3 МБ ( 8 МБ для экрана HD). Так что для слайд-шоу из 10 слайдов это будет 30-80 МБ только для кэширования изображений. Короткая песня, преобразованная в 16-битную выборку 44,1 кГц (качество CD), также в среднем весит.
Из моего кода C # (но это может быть Java, Python и т. Д.), если я буду заботиться о о создании сложной системы кэширования для освобождения памяти, когда это возможно, или я должен доверять ОС чтобы поменять это? (И результат будет таким же? Один подход будет лучше другого? Почему?)