缓存池模块

Unity在删除实例化对象时,内存并未立即释放,可能导致GC卡顿。为了解决这个问题,引入缓存池机制,将不再使用的物体保存在缓存池中,待下次使用时复用,减少内存分配和GC。缓存池通过Dictionary分类存储不同类型的GameObject,场景切换时需清空并管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Unity中,通过代码实例化对象后,在内存中分配空间,当删除时,虽然对象不在了,但是其实它在内存中并没有立即释放,直到内存分配满了,再把没有引用的内存空间释放掉,即GC,这是有很大消耗的,可能会造成明显的卡顿,因此就需要缓存池了。缓存池的作用就是实例化的物体使用完后,不将其删除,而是放在一个内存空间(缓存池)中,下次要用的时候通过索引在缓存池中直接获取,即【复用】

而缓存池中有进行分类(通过Dictionary),来存储不同类型的数据,例如特效、音效、贴图等GameObject对象。

// 缓存池模块
// 1、Dictionary, List
// 2、GameObject 和 Resources两个公共类的API
// 假设该缓存池是以对象名(key)分类,存储的是一个该对象的列表
public class PoolMgr : BaseManager<PoolMgr> {
    public Dictionary<string, List<GameObject>> pool = new Dictionary<string, List<GameObject>>();

    // 从缓存池中取
    public GameObject GetObj(string key) {
        GameObject obj = null;

        if ( pool.ContainsKey(key) & pool[key].Count > 0 ) {
            obj = pool[key][0];        // 假设默认总是取第一个
            pool[key].RemoveAt(0);
        } else {
            obj = GameObject.Instantiate(Resources.Load<GameObject>(key));
            obj.name = key;
        }
        obj.SetActive(true);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值