Работа с памятью - выгрузка и загрузка префабов
|
|
madmik | Дата: Четверг, 05 Июня 2014, 21:17 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Всем привет! Очень нужна помощь! Никак не могу разобраться с работой с памятью и ее очисткой.
Вобщем у меня такая ситуация. Я не могу понять, почему юнити начинает кушать оперативку. Программу запускаю на IPAD, подключаю к нему XCODE и Профайлер Юнити. Версия Юнити 4.3.1 Pro. Занимаемую память тестирую через: Xcode Вкладка Debug Navigator Xcode Instruments Unity Profiler
Делаю следующее:
0) Запускаю пустую сцену. Занимаемая память XCODE Debug Navigator: 11 mb Instruments: 26.4 mb Unity Profiler: used total 13.2 reserved total 13.7 1) Загружаю префаб prefab = Resources.Load("Room1"); Занимаемая память XCODE Debug Navigator: 30.8 mb Instruments: 49.54 mb Unity Profiler: used total 19.8 reserved total 20.4 2) Делаю инстанс префаба go = (GameObject)Instantiate(prefab); go.name = "Room1"; XCODE Debug Navigator: 31.2 mb Instruments: 50 mb Unity Profiler: used total 20 reserved total 20.7 3) Далее делаю уничтожение всех объектов на сцене - память остается также Transform[] tr = FindObjectsOfType<Transform>(); for (int i = 0; i < tr.Length; i++) { GameObject goo = tr[i].gameObject; if (goo.name != "Main Camera") {Destroy(goo); goo = null;} } XCODE Debug Navigator: 31.1 mb Instruments: 49.93 mb Unity Profiler: used total 19.8 reserved total 20.4 4) Resources.UnloadUnusedAssets(); - память остается также 5) System.GC.Collect(); - память остается также 6) Делаю UnloadAsset префаба Resources.UnloadAsset(prefab); - память остается также 7) Делаю Resources.UnloadUnusedAssets(); - XCODE Debug Navigator: 21.9 mb Instruments: 40.79 mb Unity Profiler: used total 13.2 reserved total 13.9 Подтерлось большое количество текстур - видно в профайлере 8) System.GC.Collect(); - память остается также 9) Запускаю чистую сцену - память остается также Еще один интересный момент:
Если нажимаю круглую кнопку айпада и запускаю другое приложение - тогда видно что память приложения сильно уменьшается и если я открываю приложение - его размер становится первоначальным.- Видимо тут юнити что-то подчищает на нативном уровне...
Ну так вопрос такой. 1) Почему память не освобождается полностью - это видно по Instruments и Xcode - хотя в Profiler мы видим, что вроде нормально все освободилось? 2) Реально ли вообще очистить всю память, чтобы память под приложение опять занимала по минимуму? 3) Правильно ли я вообще все это делаю?
Тестовый проект находится здесь: http://gfile.ru/aa5on
Заранее большое спасибо за внимание к теме.
|
|
| |
Ranger | Дата: Суббота, 07 Июня 2014, 07:35 | Сообщение # 2 |
почти ветеран
Сейчас нет на сайте
| ДА вроде правильно все. Даже, мне кажется этот форс Цитата madmik ( ) System.GC.Collect(); лишний. Что говорит профайлер юнити при запуске проекта из редактора а не с устройства?
Сообщение отредактировал Ranger - Суббота, 07 Июня 2014, 07:37 |
|
| |