ObjectPool的原理是什么
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇内容主要讲解"ObjectPool的原理是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"ObjectPool的原理是什么"吧!ObjectPool
千家信息网最后更新 2025年12月02日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安全错误
数据库的锁怎样保障安全
重庆惠普服务器维修虚拟主机
计算机网络技术考研难么
关系数据库主要讲啥
一万人同时游戏在线的服务器
数据库sql教程
网络安全案例图片
网络安全的股票怎么估值
网络安全技术应用发展报告
pc幸运28预测软件开发
湟源租房软件开发
软件开发的基本步骤是什么
国资企业做软件开发
淘宝用的服务器
如何进入当前环境的服务器
长沙辰运软件开发加班多么
茂名通信软件开发价钱
昆山诚臻软件开发有限公司
内网GPS定位服务器
努娃厦门网络技术怎样
网络服务器应用实训报告
广西党建设计软件开发
打印机服务器编程
统计数据库查询次数
网络安全分运维和什么
政务网络技术发展趋势
新站区软件开发公司
商业软件开发相关的法律法规
2022哇嘎连不上服务器
大连软件开发侯坡
浅述网络安全产品