1

Я играл в Starcraft 2 на моей машине с 32 ГБ оперативной памяти. Я думал о том, как максимальная скорость игры может составлять ~ 2 ГБ, но она все равно должна загружать разные карты для одного игрока.

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

У меня вопрос: знает ли кто-нибудь, есть ли способ кэшировать всю папку с игрой, так как она составляет всего 13 ГБ, тем самым делая любой доступ ко всем ресурсам, связанным с игрой, попаданием в RAM-кэш и, таким образом, сокращая время загрузки?

Я бы подумал, что если бы все это было в ОЗУ (PC3-12800), теоретическая пропускная способность составляет ~ 12 ГБайт / с, что сделало бы всю загрузку почти мгновенной, нет?

3 ответа3

4

Почему бы вам не попробовать установить его в оперативную память или переместить туда файлы? Если не считать реверс-инжиниринг программы, то, вероятно, наилучшим вариантом будет использование оперативной памяти.
Вот дополнительная информация суперпользователя о виртуальных дисках: https://superuser.com/questions/522011/is-there-any-open-source-ramdisk-software-for-windows

3

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

Для любой ОС, которая того стоит, действительно "свободной" памяти должно быть очень мало - всего несколько мегабайт. Вся оставшаяся память предназначена для кэширования данных на диске. Если какая-либо программа запрашивает большой блок памяти, используя malloc или GlobalAlloc , не важные данные, кэшированные для чтения, выбрасываются для удовлетворения этого запроса на выделение памяти.

Одно интересное свойство этого кэширования состоит в том, что даже если у вас есть 32-разрядное приложение, которое не может выделить более 4 ГБ ОЗУ, файлы, к которым обращается это приложение, все равно будут кэшироваться вашей 64-разрядной ОС, даже если общий размер всех файлов будет хорошим за 4 ГБ.

Другими словами, если у вас есть 32 ГБ ОЗУ, и вы начинаете играть в свою игру, которая весит 13 ГБ, Windows попытается активно кешировать все 13 ГБ в ОЗУ. Однако это не означает, что он останется в этом кеше навсегда, потому что, скорее всего, данные сильно сжаты, и поскольку Starcraft необходимо распаковать эти данные в памяти, чтобы иметь возможность манипулировать ими и создавать представление вашего игрового мира, он может попытаться выделять много памяти из Windows, что может заставить ее выбрасывать часть этого кэшированного содержимого (но даже тогда, в наименьшей степени использованным способом).

С практической точки зрения, вероятно, самый простой способ ускорить загрузку - это использовать SSD-накопитель. Современные SSD-накопители обычно имеют скорость чтения около 500 МБ / с - примерно в 5 раз быстрее, чем обычный жесткий диск. Что еще лучше, скорость чтения SSD не требует огромных усилий при чтении действительно маленьких файлов (для стандартного жесткого диска скорость чтения может быть в 100 раз ниже для маленьких файлов).

0

Откройте FAR Manager или Total Commander и скопируйте всю папку StarCraft в nul. Он будет загружен в память.

Но я не думаю, что это сильно ускорит загрузку. Загрузка 100 МБ из пары файлов - не проблема. Только если вы видите, что светодиод жесткого диска мигает почти постоянно, вы можете предположить, что жесткий диск ограничивает вашу производительность.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .