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

西安电脑网站建设515ppt网站建设

西安电脑网站建设,515ppt网站建设,我做的网站怎么打开很慢,网络营销模式下品牌推广研究前言 之前写过一篇关于对象池的文章#xff0c;现在来看写的并不是很好#xff0c;所以来考虑优化下。 现在来看一年前写的代码#xff0c;越看越不能入目hhh Unity学习笔记–如何优雅简便地利用对象池生成游戏对象 前置知识 Unity学习笔记–使用 C# 开发一个 LRU 代码实…前言 之前写过一篇关于对象池的文章现在来看写的并不是很好所以来考虑优化下。 现在来看一年前写的代码越看越不能入目hhh Unity学习笔记–如何优雅简便地利用对象池生成游戏对象 前置知识 Unity学习笔记–使用 C# 开发一个 LRU 代码实现 PoolManager.cs using System; using System.Collections.Generic; using Factory;namespace ToolManager {public class PoolManager{private Dictionarystring, LinkedListNodeTuplestring, Pool lru_dict; // Key : pool_name obj_nameprivate LinkedListTuplestring, Pool cache;private int capacity;public PoolManager(int capacity_in 64){capacity capacity_in;cache new LinkedListTuplestring, Pool();lru_dict new Dictionarystring, LinkedListNodeTuplestring, Pool();}public bool HasPool(string path){return lru_dict.ContainsKey(path);}public bool AddPool(BaseFactory factory, int init_count 0){string pool_name factory.GetObjPath();if (HasPool(pool_name)){return false;}Pool pool new Pool(this, pool_name, factory, init_count);LinkedListNodeTuplestring, Pool node new LinkedListNodeTuplestring, Pool(Tuple.Create(pool_name, pool));LRUAdd(node);return true;}public bool DelPool(string name){if (!HasPool(name)){return false;}var node lru_dict[name];GetPool(node).ReleasePool();LRURemove(node);return true;}public object PopOne(string name){object res null;if (HasPool(name)){var node lru_dict[name];LRUChange(node);Pool pool GetPool(node);res pool.PopOne();LRURemove(node);}return res;}public object[] Pop(string name, int count){object[] res null;if (HasPool(name)){var node lru_dict[name];LRUChange(node);Pool pool GetPool(node);res pool.Pop(count);LRURemove(node);}return res;}public void PushOne(string name, object obj){if (HasPool(name)){var node lru_dict[name];LRUChange(node);GetPool(node).PushOne(obj);RefreshLRU();}}public void Push(string name, object[] objs){if (HasPool(name)){var node lru_dict[name];LRUChange(node);GetPool(node).Push(objs);RefreshLRU();}}private Pool GetPool(LinkedListNodeTuplestring, Pool node){return node.Value.Item2;}// ------------------------- LRU Function -------------------------private void LRUChange(LinkedListNodeTuplestring, Pool node){cache.Remove(node);cache.AddLast(node);}private void LRUAdd(LinkedListNodeTuplestring, Pool node){lru_dict.Add(node.Value.Item1, node);cache.AddLast(node);}private void LRURemove(LinkedListNodeTuplestring, Pool node){cache.Remove(node);lru_dict.Remove(node.Value.Item1);}private void RefreshLRU(){int lru_count LRUCacheCount;while (lru_count capacity){Pool pool GetPool(cache.First);int n_objects_to_remove Math.Min(pool.PoolCount, lru_count - capacity);for (int i 0; i n_objects_to_remove; i){pool.ReleaseOne();}if(pool.PoolCount 0){DelPool(pool.pool_name);}lru_count LRUCacheCount;}}private int LRUCacheCount{get{int count 0;foreach (var node in lru_dict.Values){count node.Value.Item2.PoolCount;}return count;}}private class Pool{private PoolManager pool_mgr;private BaseFactory factory;private Queueobject queue;public string pool_name;public Pool(PoolManager pool_mgr_in, string pool_name_in, BaseFactory factory_in, int init_count_in){pool_mgr pool_mgr_in;pool_name pool_name_in;factory factory_in;queue new Queueobject();InitPool(init_count_in);}private void InitPool(int init_count){for (int i 0; i init_count; i){queue.Enqueue(factory.CreateObject());}}public void ReleasePool(){foreach (var obj in queue){factory.DestroyObject(obj);}queue.Clear();factory.ReleaseFactory();}public object PopOne(){if (queue.Count 0){object obj queue.Dequeue();factory.ResetObject(obj);return obj;}return factory.CreateObject();}public object[] Pop(int count){object[] objs new object[count];for (int i 0; i count; i){objs[i] PopOne();}return objs;}public void PushOne(object obj){factory.RecycleObject(obj);queue.Enqueue(obj);}public void Push(object[] objs){foreach (var obj in objs){PushOne(obj);}}public void ReleaseOne(){factory.DestroyObject(queue.Dequeue());}public int PoolCount { get queue.Count; }}} } BaseFactory.cs namespace Factory {public abstract class BaseFactory{protected string obj_path;public BaseFactory(string obj_path_in){obj_path obj_path_in;}public abstract object CreateObject();public abstract void ResetObject(object obj);public abstract void RecycleObject(object obj);public abstract void DestroyObject(object obj);public abstract void ReleaseFactory();public virtual string GetObjPath(){return obj_path;}} }使用 创建 Factory using Factory;public class BulletFactory : BaseFactory {public BulletFactory(string obj_path_in) : base(obj_path_in){}public override object CreateObject(){Bullet bullet new Bullet(obj_path);bullet.ReuseInit();return bullet;}public override void DestroyObject(object obj){((Bullet)obj).Destroy();}public override void RecycleObject(object obj){((Bullet)obj).Recycle();}public override void ReleaseFactory(){}public override void ResetObject(object obj){((Bullet)obj).ReuseInit();} } 创建 object using System.Collections; using System.Collections.Generic; using UnityEngine;public class Bullet {private GameObject go;private string path;private static GameObject prefab;public Bullet(string path_in){path path_in;if (prefab null){prefab (GameObject) Resources.Load(path);}}public void ReuseInit(){if (go){go.SetActive(true);}else{go GameObject.Instantiate(prefab);}go.GetComponentRecycleMe().DelayCall(1, Func);}public void Destroy(){GameObject.Destroy(go);}public void Recycle(){go.SetActive(false);}private void Func(){BulletManager.Ins.PushOne(path, this);} } 创建 BulletManager BulletManager.cs using System.Collections; using System.Collections.Generic; using UnityEngine; using ToolManager;public class BulletManager : MonoBehaviour {private PoolManager pool_mgr;private static BulletManager _ins;public static BulletManager Ins{get _ins;}private void Awake(){Init();}private void Init(){_ins this;pool_mgr new PoolManager();}public void PushOne(string path, Bullet obj){if (!pool_mgr.HasPool(path)){pool_mgr.AddPool(new BulletFactory(path));}pool_mgr.PushOne(path, obj);}public Bullet PopOne(string path){if (!pool_mgr.HasPool(path)){pool_mgr.AddPool(new BulletFactory(path));}Bullet bullet (Bullet)pool_mgr.PopOne(path);return bullet;} } 验证 为了验证我写了一个 ShootManager.cs using System.Collections; using System.Collections.Generic; using UnityEngine;public class ShootManager : MonoBehaviour {private ListBullet bullet_list;private string path Bullet;private static ShootManager _ins;public static ShootManager Ins{get _ins;}private void Awake(){Init();}private void Init(){_ins this;bullet_list new ListBullet();}private void Update(){if (Input.GetMouseButtonDown(0)){bullet_list.Add(BulletManager.Ins.PopOne(path));}} } 创建之后过 1s 之后回收自己。 RecycleMe.cs using System; using System.Collections; using System.Collections.Generic; using UnityEngine;public class RecycleMe : MonoBehaviour {public void DelayCall(float delay, Action func){StartCoroutine(DestroyAfterDelayCoroutine(delay, func));}IEnumerator DestroyAfterDelayCoroutine(float delay, Action func){yield return new WaitForSeconds(delay);func.Invoke();}} 效果 LRUPool
http://www.huolong8.cn/news/280313/

相关文章:

  • 网站设计制作的服务怎么样网站文件夹结构
  • html5手机网站源码下载招投标网
  • 网站推广的效果好做系统去哪个网站好
  • 旅游网站的系统建设的意义兰州企业网站优化
  • 网站设计制作新报价四站合一网站建设价格
  • 深圳网站建设设计定做做食品网站有哪些内容
  • 做分色找工作网站网站套餐方案
  • 北京网站制作公司微盟小程序收费标准
  • 聊城企业网站建设公司公众号授权网站
  • 中国那个公司的网站做的最好建设通一年多少钱
  • 织梦做小游戏网站小程序定义
  • 辛集建设局官方网站大淘客做的网站可以吗
  • 网站界面设计套题通化网站建设公司
  • 徐州html5响应式网站建设php .net做网站哪个好
  • 苏州正规制作网站公司关键词搜索排行榜
  • 网站制作前期所需要准备怎么样可以建设网站
  • 有网站怎么做下载直链vi设计主题品牌
  • 网站登录 效果代码html网站设计论文
  • 用织梦搭建网站永兴网站制作
  • 做网站来钱快上海本地网站建设
  • 网页制作与网站设计wordpress使用七牛图像服务
  • 中国专门做统计网站WordPress网站接入公众号
  • 做网站能传电影网站多少钱常见的网络营销方法有哪些?
  • 广东企业品牌网站建设价格移动软件开发工程师
  • 新建网站的步骤做课宝官方网站
  • 网站个人主页模板广州网站建设说说外链的建设
  • 电商网站 模板银川建网站
  • 四川阿坝建设招标网站法治建设网站作用
  • 网站开发的目的意义特色创新网站开发需要多线程吗
  • 长沙网站建设 芙蓉区济南电视台在线直播