Ios6 在iPad中将fbx文件作为资产包加载-内存问题

Ios6 在iPad中将fbx文件作为资产包加载-内存问题,ios6,ios7,unity3d,ipad-2,unityscript,Ios6,Ios7,Unity3d,Ipad 2,Unityscript,在我们的iPad应用程序中,我们需要加载fbx文件(大小为1MB-100MB)作为资产包。我开始测试一个26MB大小的fbx文件,它创建了一个17MB大小的资产包。当我运行测试场景在iPad中加载这个资产包时,它会在大约1分钟后加载。然后我得到一个记忆警告。我使用Xcode监控内存,似乎内存使用量从1MB左右增加到65Mb,然后就在模型出现之前,内存立即增加到175MB左右。下面是我的代码。 我曾看到其他用户发布过类似的问题。但是我在这些线程中都没有看到一个合适的解决方案。正如我在这些线程中所读

在我们的iPad应用程序中,我们需要加载fbx文件(大小为1MB-100MB)作为资产包。我开始测试一个26MB大小的fbx文件,它创建了一个17MB大小的资产包。当我运行测试场景在iPad中加载这个资产包时,它会在大约1分钟后加载。然后我得到一个记忆警告。我使用Xcode监控内存,似乎内存使用量从1MB左右增加到65Mb,然后就在模型出现之前,内存立即增加到175MB左右。下面是我的代码。

我曾看到其他用户发布过类似的问题。但是我在这些线程中都没有看到一个合适的解决方案。正如我在这些线程中所读到的,我认为在解压缩资产包时内存会增加。但我不明白为什么会达到170MB左右。

我们可以做些什么来减少内存使用?
谢谢


存储的文件大小通常比内存大小小得多。例如,任何PNG文件在内存中保存一次后,仍然会占用它将占用的空间,就好像它被保存为BMP一样。-类似地,模型占用的内存会更少,但一旦加载,所有纹理和其他特征都会被处理到内存中。尝试在ide中运行它,检查游戏的内存大小,而不是文件。谢谢。这不是一个真正的游戏应用程序。它只是一个fbx文件(25MB)添加到一个空场景中。没有别的了。当我在unity编辑器中加载模型时,在stats下我看到VRAM的使用显示为2.9MB到50.8MB。在iPad中,当它运行时,它的容量增加到70MB左右,然后在模型出现之前突然增加到170MB左右,然后回到117MB,并在加载后保持不变。
    public class CachingLoad : MonoBehaviour {
    public string BundleURL;
    public string AssetName;
    public int version;

    void Start() {
        StartCoroutine (DownloadAndCache());
    }

    IEnumerator DownloadAndCache (){
        // Wait for the Caching system to be ready
        while (!Caching.ready)
            yield return null;

        BundleURL = "http://10.30.3.228:8080/TestDownload/assetBundle1.unity3d";
        // Load the AssetBundle file from Cache if it exists with the same version or download and store it in the cache
        using(WWW www = WWW.LoadFromCacheOrDownload (BundleURL, version)){
            yield return www;
            if (www.error != null)
                throw new Exception("WWW download had an error:" + www.error);
            AssetBundle bundle = www.assetBundle;
            if (AssetName == "")
                Instantiate(bundle.mainAsset);
            else
                Instantiate(bundle.Load(AssetName));
                    // Unload the AssetBundles compressed contents to conserve memory
                    bundle.Unload(false);

        } // memory is freed from the web stream (www.Dispose() gets called implicitly)
    }
}