Я проводил некоторые тесты профилирования памяти и столкнулся с ситуацией, которую я не понимаю.
В моем примере проекта у меня просто есть базовый объект сценариев с сериализованной ссылкой на файл изображения.
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 забрать его сейчас, но это никогда не освобождает память.Любое понимание очень ценится!