Почему Unity для iOS вызывает утечки памяти без вызова класса WWW? - PullRequest
1 голос
/ 04 апреля 2019

Я использую Unity AssetBundles для асинхронной загрузки.На iOS это, кажется, вызывает утечку памяти.Каждый раз, когда я загружаю новый пакет, он добавляется в используемую память, но, кажется, никогда не освобождает предыдущую память, даже если вызываются функции unload и destroy.Я не использую WWW на iOS, потому что это не казалось необходимым в Unity 5.6.7.Загрузка работает просто отлично, просто проблема с выгрузкой.

Я прошел и сжал все ресурсы для iOS, чтобы я мог продвинуться дальше в игре.Это все еще в конечном счете терпит крах на мне, потому что у него заканчивается память.Если он действительно выгружал ресурсы, он никогда не должен использовать достаточно памяти для сбоя.

Вот как выглядит моя функция UnloadBundle:

public void UnloadBundle(string bundleName)
{
  if(!m_bundles.ContainsKey(bundleName)) return;

  Hashtable bundle = (Hashtable)m_bundles[bundleName];
  if (bundle.ContainsKey("asset"))
  {
    AssetBundle assetBundle = (AssetBundle)bundle["asset"];
    assetBundle.Unload(true);
    Destroy(assetBundle);
  }

  Resources.UnloadUnusedAssets();

  m_bundles.Remove(bundleName);
}

Она должна выгрузить пакет и удалить ресурсы из памятикогда UnloadBundle("bundlename"); называется.Вместо этого он не освобождает память и продолжает расти.Игра начинается с ~ 1 ГБ используемой памяти и медленно поднимается до ~ 1,4 ГБ и вылетает на iPhone 7.

...