Unity3D AsssetBundle加载效率比较

发表于2018-11-21
评论0 9.1k浏览
想要比较AsssetBundle加载效率,首先需要知道加载AssetBundle的主要两种方式,分别是new WWW(url)和WWW.LoadFromCacheOrDownload,两种方式的具体用法,可以在官方的API中找到,本篇就不多介绍了。

1. new WWW是单纯地把AssetBundle加载到内存

2. WWW.LoadFromCacheOrDownload是把AssetBundle写入到缓存中,然后在需要加载AssetBundle时,再从缓存中读取AssetBundle,达到一个加速效果,而且只在内存中保存一些必要的缓存指针信息,因此非常省内存,也是大多数人会选择使用的。

两种方式的加载效率比较:


测试结果:

1.在PC上,两种方式的效率,第一次只相差大约40%,可能PC端的硬盘有高速缓存和读写速度相对较快的原因,而在移动端,效率则相差2倍之多

2.第二种方式在二次读取时,速度很快

3.推荐使用第二种方式

总结:

根据上面的比较,可以看出WWW.LoadFromCacheOrDownload虽然在第首次加载时,略慢于new WWW,但在之后的二次加载(如退出游戏程序,再次进入游戏,也算二次加载),WWW.LoadFromCacheOrDownload会带来更加快的加载速度和更加节约内存,即使是一百多兆的资源,全部加载完成,也大概只占不要10MB的内存,因为Unity给它们都做了硬盘缓存,开辟了大量的磁盘空间来换取消耗大量内存的代价。并且在加载完AssetBundle后,实例化的速度和new WWW的无任何差异。WWW.LoadFromCacheOrDownload完胜!

其他注意点:

使用WWW.LoadFromCacheOrDownload加载时,若磁盘空间已满并所有的缓存文件都在使用中,则WWW.LoadFromCacheOrDownload会调用new WWW()方式,把资源载入内存中。较好地解决了磁盘不足的情况。

在缓存中,Unity进行资源识别的唯一方式是资源名称+版本号,因此无论是何种资源,资源名称不能相同。

对缓存的所有操作都在Caching类中,仅提供简单的查询和清除操作。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: