Unity UnloadAsset API не работает даже после пометки ресурса как грязного - PullRequest
0 голосов
/ 26 сентября 2019

Я проводил некоторые тесты профилирования памяти и столкнулся с ситуацией, которую я не понимаю.

В моем примере проекта у меня просто есть базовый объект сценариев с сериализованной ссылкой на файл изображения.

public class Sciptable : ScriptableObject
{
    [SerializeField]
    public Texture image;
}

В OnStart я делал некоторые загрузки и выгрузки, чтобы посмотреть, как очищается память.В одном тесте я просто загружаю все объекты сценариев:

     var data = Resources.LoadAll("Data", typeof(ScriptableObject));

И профилировщик памяти показывает, что память текстур выросла:

Текстуры: 494 / 173,3 МБ

Затем я пытаюсь освободить память, вызывая UnloadAsset :

    foreach(var obj in data)
    {
        EditorUtility.SetDirty(obj);
        Resources.UnloadAsset(obj);
    }

Это не очищает память.

Однако, когдаЯ звоню Resources.UnloadUnusedAssets это освобождает память.

Знаете ли вы, почему мой первый подход не приводит к освобождению памяти?Насколько я понимаю, я отмечаю это как грязное и приказываю GC забрать его сейчас, но это никогда не освобождает память.Любое понимание очень ценится!

...