Unity Assetbundle的加载方式的效率和内存占用

一,三加载的Assetbundle文件对象22.2MB,unity自带压缩的ab文件
二加载的Assetbundle文件对象52.2MB,未使用unity自带压缩

url/path指定的路径要求是Assetbundle文件,不要对Assetbundle再进行加密压缩的,搞的unity认不出。
以下方法用的Assetbundle都是已经下载到本地SD卡再读取的


. 加载方式 开始load到生成Assetbundle时间 内存Used Total变化
WWW.LoadFromCacheOrDownload(string url, int version) 0.084s 51.6M-78.9M-104M
Assetbundle.CreateFromFile(string path) 0.012s 52M-78M-103M
Assetbndle.CreateFromMemory(byte[] bs) 2.599s 51M-108M-195M-217M


一,WWW.LoadFromCacheOrDownload(string url, Int version):
异步方法
开始load到生成Assetbundle时间:0.084s
内存Used Total变化:51.6M-78.9M-104M

这个方法简单方便,效率不错,而且加载时占内存少,我没明白它把缓存存到哪个路径了。有人 说使用这个方法更新有时出现失败的情况,但我没遇到过。对于有资源更新需求的建议还是自己定义更新版本号。对于这种让人封装得比较“完美”的方法,我觉得并非很多人都喜欢。

二,Assetbundle.CreateFromFile(string path)
非异步方法,

unity官方文档上说最快的加载Assetbundle方式。
从指定路径开始load到生成Assetbundle时间:0.012s
内存Used Total变化:52M-78M-103M

注意:这里的url指定的Assetbundle要求是没有压缩过的,此方法也只能加载未压缩过的,就是打包ab时选择不压缩。
这个方法加载效率高,内存占用低,推荐使用,只是使用未经过unity压缩的Assetbundle,但下载或打包进StreammingAssets时我们可以自己压缩。虽然如此,但最后还是得解压到手机SD卡,占用一定的手机SD卡空间。

三,Assetbndle.CreateFromMemory(byte[] bs)
传入unity自身压缩过的Assetbundle文件的字节,
从指定路径开始load到生成Assetbundle时间:2.599s,(太大,直接停在这一帧了)
内存Used Total变化:51M-108M-195M-217M

这个方法先把Assetbundle文件的字节加载进内存,再从这些字节生成Assetbundle,最后导致加载时间漫漫,内存使用飙升。他的好处是可以对字节进行处理,就是加密,这样就可以对手机SD卡中的Assetbundle文件进行加密也能够使用了。


以上的内存最高值只是某一时刻的
当然,引用完Assetbundle后要使用Unload进行释放。

如果觉得调用Unload(false)没什么效果,试试:
引用至jesse_luzexi的博客:

这是U3D没有处理好的一个环节。在WWW加载资源完毕后,对资源进行instantiate后,对其资源进行unload,这时问题就发生
了,instantiate处理渲染需要一定的时间,虽然很短,但也是需要1,2帧的时间。此时进行unload会对资源渲染造成影响,以至于没有贴图或
者等等问题发生,等待个0.5秒到1秒之后再进行Unload。这样就不会出现instantiate渲染中就运行unload的情况了。

你可能感兴趣的:(Unity开发)