ios - 为什么 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 上崩溃。
解决方案
推荐阅读
- python - 使用 NETCONF 在接口上启用 SNMP mac 通知更改
- java - java 如何准确处理泛型可变参数?
- c# - JS解密方法转C#
- python - 在spacy中,如果一个词被标记为不同的实体类型,那么如何删除一个实体类型及其跨度?
- python - 可以在每次迭代中用更新变量矢量化这个 for 循环吗?
- c# - 我可以让 if 语句更改循环中访问的变量吗
- javascript - Prisma 示例工作时,Prisma 嵌套创建引发未知 arg 错误
- python - 在 TensorFlow 模型中实现归一化
- python - (py)跨多个ID的spark数据帧重新分区
- python - 删除 Pandas 中包含多个连字符的行