Пожалуйста, рассмотрите также ответ @Foggzie для некоторых лучших практик (я использовал некоторые из них)!
Были две проблемы с моим кодом или процедурой тестирования.
1. Не используйте WWW.LoadFromCacheOrDownload
Unity Встроенный WWW.LoadFromCacheOrDownload - это дерьмо! Шутки в сторону! Зачем ? Бен Винсон и единство также объясняют в своих блогах:
Другим источником проблем, связанных с памятью, является файловая система IndexedDB.
используется Unity. Каждый раз, когда вы кэшируете пакет активов или используете любой
методы, связанные с файловой системой, они хранятся в виртуальной файловой системе
поддержанный IndexedDB.
Что вы можете не осознавать, так это то, что эта виртуальная файловая система загружена
в и сохраняется в памяти, как только ваше приложение Unity запускается.
Это означает, что если вы используете механизм кэширования Unity по умолчанию
для пакетов активов вы добавляете размер всех этих пакетов в
требования к памяти для вашей игры , даже если они не
загружен .
И Unity ясно упоминается в его блоге , чтобы использовать UnityWebRequest вместо LoadFromCacheOrDownload:
Более долгосрочное решение для минимизации накладных расходов на кеширование пакетов ресурсов - использовать WWW Constructor вместо LoadFromCacheOrDownload () или использовать UnityWebRequest.GetAssetBundle () без параметра hash / version, если вы используете новый API UnityWebRequest.
Затем используйте альтернативный механизм кэширования на уровне XMLHttpRequest,
который сохраняет загруженный файл непосредственно в indexedDB, минуя
файловая система памяти. Это именно то, что мы разработали в последнее время
и он доступен в магазине активов. Не стесняйтесь использовать его в своем
проекты и настроить его, если вам нужно.
2. Не измерять память, когда открыты инструменты Chrome Dev
Кажется, что приращение памяти при перезагрузке страницы связано с внутренним механизмом FireFox. Но это происходило в chrome из-за инструментов разработчика, которые были открыты, когда я проверял память.
Как только я измерил память вкладок в chrome, были открыты инструменты разработки, поэтому они увеличивали объем памяти при каждом обновлении страницы. Эта причина определена одним из чиновников Unity на форуме
Следует отметить, что при профилировании использования памяти при перезагрузке страницы
в Firefox убедитесь, что у вас есть веб-консоль Firefox (и отладчик)
окно закрыто. Firefox ведет себя так: если веб-консоль открыта,
поддерживает отладчик Firefox JS, который прикрепляет все посещенные страницы к
быть кэшированным в памяти, никогда не возвращая их. Закрытие веб-сайта Firefox
Консоль страниц позволяет освобождать старые страницы из памяти.
Я не знаю, может ли Chrome иметь подобное поведение, но насовсем
мера, хорошо, чтобы его веб-консоль была закрыта, чтобы убедиться, что она не
сохраняя страницы живыми.
Если у кого-то есть общедоступный тестовый пример, который он может опубликовать,
было бы полезно определить источник.
Но на самом деле мой тест подсказывает , что эта проблема все еще сохраняется в FireFox при разрешении для Google Chrome.
Помните, я получил этот ответ после долгой борьбы.
Обновление: я обнаружил, что при перезагрузке страницы в Firefox она удваивает память страницы. Так что это проблема Firefox, не связанная с Unity Webgl.