当前位置: 首页 > wzjs >正文

建设网站的服务宗旨二手书屋网站开发的意义

建设网站的服务宗旨,二手书屋网站开发的意义,做网站的公司怎么找,简历模板个人简历电子版免费下载一、设计目的 为了避免频繁创建和销毁对象&#xff08;例如 UI 元素、事件对象等&#xff09;带来的内存分配和垃圾回收压力&#xff0c;可以使用对象池来管理对象来提高游戏的性能&#xff0c;避免游戏卡顿。 二、代码实现 public interface IRecycle {/// <summary>…

一、设计目的

为了避免频繁创建和销毁对象(例如 UI 元素、事件对象等)带来的内存分配和垃圾回收压力,可以使用对象池来管理对象来提高游戏的性能,避免游戏卡顿。

二、代码实现

public interface IRecycle
{/// <summary>/// 回池必须调用的接口/// </summary>public void OnRecycle();/// <summary>/// 初始化接口/// </summary>public void OnFetch();
}public class CacheObjectMgr: Singleton<CacheObjectMgr>
{private Dictionary<Type, Queue<IRecycle>> m_Gos;protected override void OnInit(){base.OnInit();m_Gos = new Dictionary<Type, Queue<IRecycle>>();}public T Fetch<T>() where T : class, IRecycle, new(){IRecycle obj = null;Queue<IRecycle> pool = _GetPool(typeof(T));if (pool.Count > 0){obj = pool.Dequeue();}else{obj = new T();}obj.OnFetch();return obj as T;}public void Recycle(IRecycle go){if (go != null){go.OnRecycle();_GetPool(go.GetType()).Enqueue(go);}}private Queue<IRecycle> _GetPool(Type type){Queue<IRecycle> pool = null;if(!m_Gos.TryGetValue(type, out pool)){pool = new Queue<IRecycle>();m_Gos.Add(type, pool);}return pool;}
}

1.代码分析

字典存储结构:使用 Type 作为键,存储每种类型对应的对象池(队列)。这样不同类型的对象可以分开管理,且在回收和取用时无需强制转换。

对象池的设计:每个队列中存储的都是 IRecycle 类型的对象。由于 C# 支持接口的多态性,只要对象实现了  IRecycle 接口,就可以存入该队列中,而不需要关心具体的实现类型。

这个接口定义了两个关键方法

OnFetch():在对象从池中取出时调用,用于执行初始化工作(例如重置状态、注册事件等)。 OnRecycle():在对象回收前调用,用于清理或重置对象状态(例如注销事件、释放资源等)。

Fetch 逻辑:方法约束:where T : class, IRecycle, new() 确保了被管理的对象必须实现 IRecycle 接口,并且可以通过无参构造函数创建。

获取对象的方式:

①通过 _GetPool(typeof(T)) 获取对应类型的对象池(如果不存在则创建新的队列)。

②判断池中是否有可用对象:如果有则调用 Dequeue 取出,否则通过 new T() 创建新对象。

③调用对象的 OnFetch() 方法完成初始化操作(例如注册事件、设置状态等)。

④返回对象,并通过 as T 进行类型转换。

这种实现方式确保了在每次从池中取出对象前,都能通过 OnFetch方法对对象进行了必要的初始化,保证对象处于可用状态。

该方法通过传入对象的类型来获取或创建对应的队列。

获取对象的方式:

①判断是否存在该类型的对象池,如果不存在就创建该类型的对象池并将其添加到字典中。

②如果存在就获取该类型的对象池。

回收对象的方法:

该方法在对象使用完毕后,进行调用 Recycle 方法然后将对象放回池中。

①判断对象是否为空

②调用对象的 OnRecycle() 方法:此方法通常用于清理、解除事件注册、释放使用过的资源等,这样可以确保对象在下次取用前处于一个全新的状态。

③然后根据对象类型,调用 _GetPool(go.GetType()) 获取对应的队列,然后使用 Enqueue 将对象加入队列。

三.示例演示

关键步骤:

在类中去实现IRecycle这个接口,实现这个接口就要去实现接口中所声明的所有方法。

在通过Fetch方法创建对象时会调用该对象中的OnFetch() 进行初始化。

回收方法实现:

在事件结束后调用OnRelease进行回收,调用该方法会通过Recycle先调用 OnRecycle() 方法,进行比如:清理状态、注销事件和释放使用过的资源等。然后将对象重新放入对象池中,等待下次复用。

四、总结

通过这种方式去管理游戏中的对象,可以减少了对象频繁创建的性能开销,进而避免游戏卡顿。

http://www.dtcms.com/wzjs/576600.html

相关文章:

  • wordpress 导航网站主题网络营销的概述
  • 个人网站整站下载无锡网站制作厂家地址
  • 用手机做网站的流程网页升级紧急通知在哪里看
  • 网站建设 开票网站开发自学资料
  • 做网站还是小程序百度移动开放平台
  • 东莞建筑建设网站建设天元建设集团有限公司企业简介
  • 网站怎么添加流量网站做一个要多少钱
  • 假建设银行网站网络营销工程师有用吗
  • 我要建个网站app电商网站
  • 世界杯直播观看网站企业商标图案大全
  • 上海哪里做网站河南省内 在哪个网站做商检表
  • 北京专业做网站公司哪家好企业展厅制作
  • 广西企业响应式网站建设设计做相亲网站需要什么流程
  • 深圳网站建设送域名如何选择网站项目
  • 国外优秀摄影网站网站开发团队分工
  • 网站一般用什么语言写网站后台怎么修改文字
  • php开源建站系统怎么做淘宝 天猫京东网店的网站
  • 电子商务网站建设视频网页设计工程师工资多少
  • 如何建设vr网站h5网站建设代理
  • 如何利用模板建站兰州装修公司前十名
  • 深圳福田网站建设公司哪家好设计工作室发展前景
  • 做网站接单的网站wordpress站点大全
  • 如何不要钱做网站公众号开发者模式
  • 网站开发培训设计织梦cms做企业网站
  • 江苏省建设工程协会网站客户关系管理流程图
  • 国外怎么做推广网站wordpress 数据库字段
  • 柳州市城市建设局网站做网站需要一些什么东西
  • 有名的网站建设公司中国建设银行官网下载
  • 如何自己做彩票网站建立外贸网站多少钱
  • 做的网站怎么联网wordpress 悬浮公告