首页 > 解决方案 > 为什么 Unity for iOS 在没有调用 WWW 类的情况下导致内存泄漏?

问题描述

我正在使用 Unity AssetBundles 进行异步加载。在 iOS 上,这似乎会导致内存泄漏。每次我加载一个新包时,它都会添加到已用内存中,但即使调用了 unload 函数和 destroy ,它似乎也不会释放以前的内存。我没有在 iOS 上使用 WWW,因为在 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");它应该在被调用时卸载包并从内存中删除资产。相反,它不会释放内存并继续攀升。游戏开始时使用了约 1GB 的内存,然后慢慢攀升,直到达到约 1.4GB 并在 iPhone 7 上崩溃。

标签: iosunity3dmemory-leaksassetbundle

解决方案


推荐阅读