AssetBundle单个Assets打成bundle和多个Asset打成一个Bundle加载分析(一)

最近在参与AssetBundle划分策略的讨论,关于AssetBundle的细分方面,记得上个项目的时候主程说过,IOS有一个限制文件句柄的问题,还有5.3之前Android的SerializeFile每一个都是512K,不过这些问题在新的版本中都已经解决,但是是否bundle越大越好,或者是越细碎越好呢?简单做了一个测试,将大概80个图片单打成一个bundle大概1M以及打成80个不同的bundle,为求结果的准确性,测试2000次:

测试代码如下:

if (GUI.Button(new Rect(100, 200, 100, 50), "LoadOneByOne"))
        {
            string[] tempArr = bbb.Split(',');
            float totalTime = 0;
            Dictionary tempDic = new Dictionary();
            for (int i = 0; i < 2000; i++)
            {
                for (int j = 0; j < tempArr.Length; j++)
                {
                    float t = Time.realtimeSinceStartup;
                    AssetBundle assetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + tempArr[j].ToLower());
                    totalTime += (Time.realtimeSinceStartup - t) * 1000;
                    assetBundle.Unload(true);
                }
                System.GC.Collect();
                Resources.UnloadUnusedAssets();
            }
            Debug.LogError(string.Format("*****AssetBundle Assets Load Time {0}:{1}", "LoadAssetOneByOne", totalTime));
            resultStr += string.Format("*****AssetBundle Assets Load Time {0}:{1}", "LoadAssetOneByOne", totalTime);
        }

        if (GUI.Button(new Rect(100, 300, 100, 50), "LoadAssetTotal"))
        {
            float totalTime = 0;
            for (int i = 0; i < 2000; i++)
            {
                float t = Time.realtimeSinceStartup;
                AssetBundle assetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/commatlas1");
                totalTime += (Time.realtimeSinceStartup - t) * 1000;
                assetBundle.Unload(true);
                assetBundle = null;
                System.GC.Collect();
                Resources.UnloadUnusedAssets();
            }
            Debug.LogError(string.Format("*****AssetBundle Assets Load Time {0}:{1}", "LoadAssetTotal", totalTime));
            resultStr += "\n" + string.Format("*****AssetBundle Assets Load Time {0}:{1}", "LoadAssetTotal", totalTime);
        }
    }

PC测试结果:

AssetBundle单个Assets打成bundle和多个Asset打成一个Bundle加载分析(一)_第1张图片

加载一次时间:

单个bundle:80个bundle加载一次时间16.57ms,平均加载一个0.20ms

打成一个bundle:加载一次0.895ms

AssetBundle单个Assets打成bundle和多个Asset打成一个Bundle加载分析(一)_第2张图片

加载一次时间:

单个bundle:80个bundle加载一次时间61.20ms,平均加载一个0.76ms

打成一个bundle:加载一次5.0ms

由此可见bundle过大或者是过碎,必定会引起加载时间的增加,合理的划分策略必然会提高游戏性能

你可能感兴趣的:(性能分析)