缓存池(对象池)使用

框架介绍

对象池的实现是为了优化内存管理和提升性能,尤其是在创建和销毁大量对象时,通过复用已经创建的对象来减少垃圾回收的负担。

实现概述

开放公共方法

记忆已更新

这个对象池的实现是为了优化内存管理和提升性能,尤其是在创建和销毁大量对象时,通过复用已经创建的对象来减少垃圾回收的负担。下面我逐步解释这个实现并推荐一个案例来展示如何使用它。

代码概述

  1. PoolData 类:

    • 负责管理具体对象的存储。dataStack 保存的是未使用的对象,usedList 记录已使用的对象。
    • 提供了对象的获取(Pop)和回收(Push)功能,控制对象的激活状态、父子关系,并确保最大数量限制。
  2. PoolMgr 类:

    • 继承自 BaseManager<T>,是整个对象池的管理器。
    • 包含两个字典:
      • poolDic:用于存储 GameObject 类型的对象池(每个对象池都是一个 PoolData 实例)。
      • poolObjectDic:用于存储非 MonoBehaviour 类对象的池子。
    • 提供对象的获取(GetObj)和放回池子的功能(PushObj)。
  3. PoolObj 类:

    • 挂载在需要进入对象池的预制体对象上,用于指定最大可同时存在的对象数量。
  4. IPoolObject 接口与 PoolObject<T> 类:

    • 提供了自定义数据结构或逻辑类的复用接口。

使用概述

提供PoolMgr的对象池管理方案,它继承于不继承Mono的单例类,实现一个管理器的功能。

提供isOpenLayout字段来控制是否开启布局功能,指是否要将对象池失活。物体是否会有层级的展示。

提供PoolObj来控制需要使用对象池功能的预设体,可以通过这个控制缓存物体的最大数量。

提供public GameObject GetObj(string name)、public T GetObj<T>、

public void PushObj(GameObject obj)、public void PushObj<T>(T obj, string nameSpace = "")、

public void ClearPool()五个公有方法来使用对象池。

案例使用

实现

制作PoolEnemy预制体

相关推荐
Vae_Mars24 分钟前
C#中的delegate委托
开发语言·c#
公子小六5 小时前
基于.NET的Windows窗体编程之WinForms音频控件
windows·microsoft·c#·.net·音视频·winforms
绿浪19846 小时前
c# 结构体 能不能直接封送检测
开发语言·c#
新手unity自用笔记6 小时前
unity基于Socket的网络学习
网络·网络协议·学习·unity·c#·游戏引擎
格林威7 小时前
C#图像像素放大:邻域平均、双线性插值实现像素放大的C#实现代码
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
心前阳光8 小时前
Unity之XR Interaction Toolkit | IPointerDownHandler问题
unity·游戏引擎·xr
用户2986985301412 小时前
C# 实现 PowerPoint 多格式转换:图片、PDF 与 SVG 实战
c#·.net·svg
格林威14 小时前
C#图像处理:使用imagemagick实现像素放大水印转换等多种功能
android·开发语言·图像处理·人工智能·计算机视觉·c#·视觉检测
胖纸不争18 小时前
Clasp:一个带插件系统的 .NET 10 命令行工具箱
c#·net core
曹牧1 天前
C#:数字的定义和表示方式
算法·c#