网上很多论坛有人抱怨assetbundle占用资源太多。网上文章讲得比较详细的就是unity3D圣典的http://game.ceeger.com/forum/read.php?tid=4394。但这篇文章有可能误导的地方。就是那幅Asset的图
图的下方指出AssetBundle文件在内存中有镜像。但如果assetbundle都必须存在一个内存镜像在堆上,那么assetbundle的内存效率就远远比不上Resources目录的,因为Unity不会把Resources全部加载进RAM,而是用多少加多少。
经过一系列的实验:
我发现assetbundle是否存在内存映像分两种情况:
1.通过new WWW生成的对象,一定存在内存镜像。并且内存无法通过AssetBundle.Unload释放
2.通过WWW.LoadFromCacheOrDownload 生成的对象,不存在内存镜像。我猜想是由于unity将下载的数据作为文件存起来了,它在内存中应该没有镜像,而只是一个相当于文件HANDLE的东西,所以没有占用什么内存。对它的访问就和对Resources的访问机制基本一样。而AssetBundle.Unload参数为false时,基本没有什么用,因为assetbundle本来就不在内存中,最多可能仅对HANDLE进行释放。