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

wordpress摘要图片吉林seo基础知识

wordpress摘要图片,吉林seo基础知识,免费网站源码下载器,10人办公室网络搭建Unity C# 引用池 ReferencePool 1.目的 对于多次创建的数据使用new 关键字是十分消耗性能的,使用完成后由GC去自动释放,当一个类型的数据频繁创建可以使用引用池进行管理。 2.实现 项目目录 IReference 接口 要放入引用池的数据只需要继承这个接口…

Unity C# 引用池 ReferencePool

1.目的

对于多次创建的数据使用new 关键字是十分消耗性能的,使用完成后由GC去自动释放,当一个类型的数据频繁创建可以使用引用池进行管理。

2.实现

项目目录
在这里插入图片描述

IReference 接口

要放入引用池的数据只需要继承这个接口即可

namespace ReferencePool
{public interface IReference{void Clear();}
}

ReferenceCollection 引用集合

一个类型对应一个引用集合,每次请求从引用集合的队列中获取

namespace ReferencePool
{public class ReferenceCollection{private readonly Queue<IReference> m_References = new Queue<IReference>();private Type m_ReferenceType;private int m_CurrUsingRefCount;//当前引用的数量private int m_AcquireRefCount;//请求引用的总数量private int m_ReleaseRefCount;//释放引用的总数量private int m_AddRefCount;//添加引用的总数量private int m_RemoveRefCount;//移除引用的总数量public int CurrUsingRefCount => m_CurrUsingRefCount;public int AcquireRefCount => m_AcquireRefCount;public int ReleaseRefCount => m_ReleaseRefCount;public int AddRefCount => m_AddRefCount;public int RemoveRefCount => m_RemoveRefCount;public ReferenceCollection(Type refType){m_ReferenceType = refType;m_CurrUsingRefCount = 0;m_AcquireRefCount = 0;m_ReleaseRefCount = 0;m_AddRefCount = 0;m_RemoveRefCount = 0;}public T Acquire<T>() where T : class, IReference, new(){if (typeof(T) != m_ReferenceType){throw new Exception("类型不相同无法请求!!!");}m_CurrUsingRefCount++;m_AcquireRefCount++;lock (m_References){if (m_References.Count > 0){return (T)m_References.Dequeue();}}m_AddRefCount++;return new T();}public void Release(IReference reference){reference.Clear();lock (m_References){if (m_References.Contains(reference)){throw new Exception("引用已经被释放,请勿重新释放!!!");}m_References.Enqueue(reference);}m_CurrUsingRefCount--;m_ReleaseRefCount++;}public void Add<T>(int count) where T : class, IReference, new(){if (typeof(T) != m_ReferenceType){throw new Exception("类型不相同无法添加!!!");}lock (m_References){m_AddRefCount += count;while (count-- > 0){m_References.Enqueue(new T());}}}public void Remove(int count){lock (m_References){if(count > m_References.Count){count = m_References.Count;}m_RemoveRefCount += count;while (count-- > 0){m_References.Dequeue();}}}public void RemoveAll(){lock (m_References){m_RemoveRefCount += m_References.Count;m_References.Clear();}}}
}

ReferencePool 真正的引用池

对引用集合进行统一管理

public static class ReferencePool{private static readonly Dictionary<Type,ReferenceCollection> m_ReferenceCollections = new Dictionary<Type,ReferenceCollection>();public static int Count => m_ReferenceCollections.Count;//获取引用池的数量public static void ClearAll(){lock (m_ReferenceCollections){foreach (var reference in m_ReferenceCollections.Values){reference.RemoveAll();}m_ReferenceCollections.Clear();}}public static T Acquire<T>() where T : class, IReference, new(){return GetReferenceCollection(typeof(T)).Acquire<T>();}public static void Release(IReference reference){GetReferenceCollection(reference.GetType()).Release(reference);}public static void Add<T>(int count) where T : class, IReference, new(){GetReferenceCollection(typeof(T)).Add<T>(count);}public static void Remove<T>(int count) where T : class, IReference, new(){GetReferenceCollection(typeof(T)).Remove(count);}public static void RemoveAll<T>() where T : class, IReference, new(){GetReferenceCollection(typeof(T)).RemoveAll();}private static ReferenceCollection GetReferenceCollection(Type type){if (type == null){throw new Exception("Type 类型 为空!!!");}ReferenceCollection referenceCollection = null;lock (m_ReferenceCollections){if(!m_ReferenceCollections.TryGetValue(type,out referenceCollection)){referenceCollection = new ReferenceCollection(type);m_ReferenceCollections.Add(type, referenceCollection);}}return referenceCollection;}public static int GetCurrUsingRefCount<T>() where T : class, IReference, new(){return GetReferenceCollection(typeof(T)).CurrUsingRefCount;}public static int GetAcquireRefCount<T>() where T : class, IReference, new(){return GetReferenceCollection(typeof(T)).AcquireRefCount;}public static int GetReleaseRefCount<T>() where T : class, IReference, new(){return GetReferenceCollection(typeof(T)).ReleaseRefCount;}public static int GetAddRefCount<T>() where T : class, IReference, new(){return GetReferenceCollection(typeof(T)).AddRefCount;}public static int GetRemoveRefCount<T>() where T : class, IReference, new(){return GetReferenceCollection(typeof(T)).RemoveRefCount;}}

3.测试

namespace ReferencePool
{public class Program{static void Main(string[] args){TeacherData teacherData1 = ReferencePool.Acquire<TeacherData>();teacherData1.Name = "zzs";teacherData1.Age = 20;ReferencePool.Release(teacherData1);TeacherData teacherData2 = ReferencePool.Acquire<TeacherData>();teacherData1.Name = "xxx";teacherData1.Age = 18;Console.WriteLine(ReferencePool.GetCurrUsingRefCount<TeacherData>());Console.WriteLine(ReferencePool.GetAcquireRefCount<TeacherData>());Console.WriteLine(ReferencePool.GetReleaseRefCount<TeacherData>());Console.WriteLine(ReferencePool.GetAddRefCount<TeacherData>());Console.WriteLine(ReferencePool.GetRemoveRefCount<TeacherData>());Console.ReadKey();}}public class TeacherData : IReference{public string Name;public int Age;public void Clear(){Name = string.Empty;Age = 0;}}
}

4.总结

重复使用的对象只创建有限次,避免来回实例化对象的开销

http://www.hkea.cn/news/913798/

相关文章:

  • 百家号如何给网站做推广推广方案是什么
  • 西安三网合一网站建设产品线上推广方案
  • 2023年免费b站入口百度网站优化
  • 响应式网站建设有利于seo网站发布与推广方案
  • 网页制作教程课件seo推广排名重要吗
  • 小规模纳税人企业所得税怎么征收广州seo招聘
  • 济南企业自助建站网络营销策划公司
  • iis 新建网站 要登录温州seo推广外包
  • 个人想做企业网站备案惠州seo代理商
  • 做公务员题的网站口红的推广软文
  • 福州网站建设 联系yanktcn 04上海百网优seo优化公司
  • 网站备案号如何获得网站建设营销推广
  • 物流网站开发公司西安 做网站
  • 商务信息网站怎么做网络视频营销策略有哪些
  • 社交做的最好的网站怎么开发一个网站
  • 教育品牌网站建设百度搜索推广和信息流推广
  • 虎门专业做网站对网络营销的认识有哪些
  • 投资理财培训网站建设抖音引流推广一个30元
  • 做景观设施的网站网络营销推广要求
  • 携程网站建设进度及实施过程网络营销的缺点及建议
  • 石家庄网站建设哪家专业中国联通腾讯
  • 能访问各种网站的浏览器百度一下网页搜索
  • 自己做网站花多少钱雅虎搜索
  • 哈尔滨招标信息网网站推广优化排名教程
  • 个人可以建论坛网站吗福清网络营销
  • 济南做网站优化价格百度推广网站一年多少钱
  • 做网上商城网站哪家好杭州seo靠谱
  • 做营销网站制作关键词优化课程
  • 网站移动终端建设口碑营销成功案例
  • 美国做试管婴儿 网站推广普通话宣传语