本文致力于总结Addressables内存管理相关概念/工作流/注意事项,起到将官方文档的 内存管理 章节进行整合与精简的作用。
一.内存管理概述
Addressables 系统对加载的AB包和AB包内的资产采用引用计数管理。加载可寻址对象时,资产和AB包的引用技术增加。释放可寻址资产时,资产和AB包的计数减少。AB包计数返回零时,AB包可被卸载。资产的加载和卸载应该成镜像的配对调用。
AB包和包内资产所占用内存是独立的,引用计数也是独立的,记住这点非常关键。
二.包的加载和卸载
整包加载:AssetBundle包含一个或多个资产,加载其中一个资产会导致整个AssetBundle包被加载到内存中
整包卸载:AssetBundle无法被部分卸载,应该当AssetBundle中所有资源都不用时,再卸载AssetBundle
三.包内资产的加载和卸载
包内资产可以逐个加载,不能逐个卸载。对资产调用释放的方法后,其内存不会立刻释放,包内资产会在释放AB包时进行释放。
四.资产加载卸载示例
A包中有资产:猫,树;
加载猫后,A包、猫被加载到内存中;计数:A包:1,猫:1,树:0;
加载树后,A包、猫、树加载到内存中;计数:A包:2,猫:1,树:1;
猫用完后,调用释放方法,A包、猫、树被加载到内存中;计数:A包:1,猫:0,树:1;
树用完后,调用释放方法,计数:A包:0,猫:0,树:0;此时A包和包内所有资产释放
可调用Resources.UnloadUnusedAssets卸载包内计数为0的资产的内存,但是因其性能较差,官方和社区都不推荐这么做,
五.性能优化之避免资产频繁卸载加载载
应当避免包被卸载后又立刻加载的情况,造成性能浪费