MemoryLeaks при использовании public Texture в MonoBehaviour

Ошибки и баги Unity3D

MemoryLeaks при использовании public Texture в MonoBehaviour

Сообщение katonik 12 дек 2012, 19:16

Добрый день. Вполне вероятно это не баг Unity, а мое незнание вопроса. Тем не менее, прошу помощи в решении проблемы.
Имеется MonoBehaviour, описывающий компонент, который содержит public Texture SomeTexutre переменную. Текстура задается из среды Unity и в дальнейшем может даже не использоваться, это на дело не влияет. После перехода на другую сцену, затем вызова Resources.UnloadUnusedAssets() и ожидания завершения операции, в памяти остается висеть текстура, которая была задана через редактор в SomeTexutre.
Одним из решений проблемы стал вызов Resources.UnloadAsset(SomeTexutre) в методе OnDestroy(). Но почему Resources.UnloadUnusedAssets() не выгружает эту текстуру самостоятельно, когда сцена уже разрушена и ссылка потеряна?
Вторым решением стало использование Resources.Load(PathToTextureInResources) перед использованием текстуры. При таком подходе текстура нормально выгружается методом Resources.UnloadUnusedAssets(), но использовать строковый путь к текстуре значительно менее удобно, чем выбрать нужную текстуру через редактор.
Утечка есть и в 3.5 версии, и в 4-й тоже.
Прошу помочь в решении проблемы. Если unity в данной ситуации работает так, как и должно, - объясните, пожалуйста, как тогда правильно работать с текстурами, когда требуется их динамическая смена в рантайм.
Спасибо.
katonik
UNец
 
Сообщения: 3
Зарегистрирован: 12 дек 2012, 18:57

Re: MemoryLeaks при использовании public Texture в MonoBehaviour

Сообщение DbIMok 12 дек 2012, 21:23

katonik писал(а):Но почему Resources.UnloadUnusedAssets() не выгружает

потому что для ее загрузки не использовались механизмы класса Resources
katonik писал(а):в памяти остается висеть текстура, которая была задана через редактор в SomeTexutre

как вы это определили? я сделал в 4-ке простой тест, после выгрузки первой и загрузки второй сцены профайлер показывает освобождение памяти.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: MemoryLeaks при использовании public Texture в MonoBehaviour

Сообщение gnoblin 12 дек 2012, 23:43

Unload() выгружает не только то что было загружено через Resources.Load() жеж :)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: MemoryLeaks при использовании public Texture в MonoBehaviour

Сообщение DbIMok 13 дек 2012, 02:36

угу
Синтаксис:
Используется csharp
                texture = null;
                yield return Resources.UnloadUnusedAssets();

и
Синтаксис:
Используется csharp
                Resources.UnloadAsset(texture)

освобождают память даже если texture линкованый в сцене ассет не из Resources папки.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: MemoryLeaks при использовании public Texture в MonoBehaviour

Сообщение katonik 13 дек 2012, 12:27

Сам попробовал сделать простой проект сейчас, с двумя сценами и public Texutre, все выгружается без проблем... Значит дело в чем-то еще, попробую найти...
katonik
UNец
 
Сообщения: 3
Зарегистрирован: 12 дек 2012, 18:57

Re: MemoryLeaks при использовании public Texture в MonoBehaviour

Сообщение katonik 13 дек 2012, 13:57

Спасибо за ответы, оказался мой касяк, unity ни при чем. Забыл отписаться от эвента в EventBus, а в нем сохранялась ссылка на метод класса в статике, из-за этого не выгружался класс, а так же его public-поля с текстурами.
katonik
UNец
 
Сообщения: 3
Зарегистрирован: 12 дек 2012, 18:57


Вернуться в Глюки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4