ObjectPool的原理是什么
发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,本篇内容主要讲解"ObjectPool的原理是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"ObjectPool的原理是什么"吧!ObjectPool
千家信息网最后更新 2024年11月19日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安全错误
数据库的锁怎样保障安全
u点家庭服务器
剑灵韩服人男捏脸数据库
arm架构服务器芯片再添猛将
北邮网络安全研究生分数
数据库如何修改char
启动wow服务器
1200针的服务器cpu
邯郸工控软件开发哪家专业
服务器输入密码多久可以修改
互联网在科技领域作用的图片
天气预报软件开发培训学校
服务器哪种系统更安全
网页制作登录界面连接数据库
如何能连上服务器
一般性的网络安全事件
复制mysql数据库
云南电信服务器端口虚拟主机
php备份数据库代码
参考文献是数据库怎么写
服务器管理员需要精通英语吗
平顶山市软件开发公司
2020郑州网络安全周时间
网络安全卫士主要源于哪些方面
软件开发招聘贵阳
数据库可以用来描述算法吗
网络安全实验视频
给网页添加数据库
六十六公里网络技术有限公司
今年网络安全宣传主题
公司数据库管理规定