Извините, что разместите это здесь, но я в отчаянии.Unity - память не уменьшается после смены сцен
У нас, похоже, есть куча памяти, которая не освобождается при загрузке новых сцен. Текущий процесс загрузки начинается с 1 уровня, используйте одноэкранный экран загрузки для загрузки в пустую сцену, затем вызывается System.GC.Collect(); и Resources.UnloadUnusedAssets(); (на всякий случай), затем загрузите следующий уровень. Но уровни только когда-либо увеличивают размер памяти, даже при перезагрузке существующей сцены, память только увеличивается.
Вот краткий обзор того, что происходит:
- Загрузка в HUB зона начинается примерно 590,000K (по использованию памяти Task Manager). Это, кажется, в порядке, как это 3D прогулка по площади
- после перехода на пустую сцену (через выше) до сих пор имеет программу на 405,000K
- после запуска первой фактической памяти уровня находится в 840,000K
- после загрузки обратно в пустую сцену снова память на 750,000K
- после запуска на новый уровень (уровень 2) она переходит к 1,195,000K
- после загрузки обратно в пустую сцену, как описано выше память на 1,010,000K
- затем, возвращаясь к миру HUB в stat (через переход нагрузки выше), память находится в 1, 227,000K
Я не думаю, что это утечка единства активов, потому что я гот через проясняться процедурными меши/материалы и в пустом экране загрузки, я посмотрел, что существовало UnityObjects, и это было только это (после вышеописанного процесса):
снимок памяти на данный момент выглядит следующим образом:
Я не знаю, являются ли они проблемой или если это редактор, но есть ли способ отслеживать, что создает текстуры рендеринга?
Одна вещь, которую мы обнаружили, загружается на уровень босса, а затем возвращается в область HUB, фактически уменьшает объем памяти, как и следовало (было около 800 МБ после перехода из области Boss -> HUB). Но я не уверен, почему это вызвало освобождение памяти.
В настоящее время на Unity 5.5.0f3
Если у кого есть какие-либо идеи о том, почему это происходит или может помочь было бы очень признателен.
Благодаря
Дисплей памяти диспетчера задач может немного вводить в заблуждение. Как и любое приложение с исполняемой средой с управляемой памятью, Unity может иметь «освобожденную» внутреннюю память, но пока не возвращает ее обратно в ОС. Вы можете получить более согласованные результаты, используя профилировщик памяти, который знает об этом, например [профилировщик, встроенный в Unity] (https://docs.unity3d.com/Manual/ProfilerMemory.html). – rutter