ObjectPool的原理是什么
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,本篇内容主要讲解"ObjectPool的原理是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"ObjectPool的原理是什么"吧!ObjectPool
千家信息网最后更新 2025年01月24日ObjectPool的原理是什么
本篇内容主要讲解"ObjectPool的原理是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"ObjectPool的原理是什么"吧!
ObjectPool是什么
通过对Unity的UI源码解析我们发现了一个对游戏性能优化相关的一个Object缓存池ObjectPool.cs
为什么
在游戏中,我们需要创建和销毁3D模型,粒子特效,List,Array,包括战斗中由于频繁释放技能创建出来的子弹等物体,它们在频繁的销毁创建过程中会产生很多的碎片在内存中,如果没有一个统一的管理器来循环利用很容易造成游戏卡顿。因此ObjectPool就是用来对游戏中的Object对象进行对象池管理用的。
怎么做
下面我们来查看源码,看下其实现原理。
using System.Collections.Generic;
using UnityEngine.Events;
namespace UnityEngine.UI
{
internal class ObjectPool where T : new()
{
private readonly Stack m_Stack = new Stack();
private readonly UnityAction m_ActionOnGet;
private readonly UnityAction m_ActionOnRelease;
public int countAll { get; private set; }
public int countActive { get { return countAll - countInactive; } }
public int countInactive { get { return m_Stack.Count; } }
public ObjectPool(UnityAction actionOnGet, UnityAction actionOnRelease)
{
m_ActionOnGet = actionOnGet;
m_ActionOnRelease = actionOnRelease;
}
public T Get()
{
T element;
if (m_Stack.Count == 0)
{
element = new T();
countAll++;
}
else
{
element = m_Stack.Pop();
}
if (m_ActionOnGet != null)
m_ActionOnGet(element);
return element;
}
public void Release(T element)
{
if (m_Stack.Count > 0 && ReferenceEquals(m_Stack.Peek(), element))
Debug.LogError("Internal error. Trying to destroy object that is already released to pool.");
if (m_ActionOnRelease != null)
m_ActionOnRelease(element);
m_Stack.Push(element);
}
}
}
ObjectPool使用了一个Stack堆(last-in-first-out (LIFO))后进先出的结构,当我们需要新建(Get)一个新的Object的时候先从Stack的堆顶取出第一个,当使用结束的时候将其释放掉(Release),也就是将其重新放回Stack堆里面。原理其实很简单,当然里面增加了放进和放出时候的Action,可以用来传入回调函数,分别在取出和释放的时候调用。
到此,相信大家对"ObjectPool的原理是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
原理
时候
频繁
内容
对象
源码
学习
管理
实用
更深
也就是
兴趣
内存
函数
后进
子弹
实用性
实际
就是
性能
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
博途opc服务器接口的作用
工业控制网络技术题库
管家婆服务器怎么登录
船舶网络技术与工程
ios服务器异常
吉林大学网络安全研究
泉州品牌发展中心 数据库
湖南回收服务器主板
软件开发公司哪个比较靠谱
云服务器购买有什么用
软件开发中架构的作用
怎么用服务器建站
桃子互联网科技
公安局网络安全责任书
曙光3000服务器
数据库表格结构优化
服务器光纤口都不亮
写论文实用的数据库
上海软件开发工作室公司电话
网络安全要用的语言
组态地磅软件开发
免费数据库管理工具mac
elena操作数据库
温州网络安全保卫支队长
蓝牙网络技术相关书籍
网络安全维护服务
湖南十大互联网科技大咖
服务器主从高可用
北京风花草网络技术
客户端向服务器发送http请求