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

南通网站排名外包企业网络解决方案

南通网站排名外包,企业网络解决方案,如何做网站宣传,公司网站开发需求文档Unity C# 引用池 ReferencePool 1.目的 对于多次创建的数据使用new 关键字是十分消耗性能的#xff0c;使用完成后由GC去自动释放#xff0c;当一个类型的数据频繁创建可以使用引用池进行管理。 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 QueueIReference m_References new QueueIReference();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 AcquireT() 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 AddT(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 DictionaryType,ReferenceCollection m_ReferenceCollections new DictionaryType,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 AcquireT() where T : class, IReference, new(){return GetReferenceCollection(typeof(T)).AcquireT();}public static void Release(IReference reference){GetReferenceCollection(reference.GetType()).Release(reference);}public static void AddT(int count) where T : class, IReference, new(){GetReferenceCollection(typeof(T)).AddT(count);}public static void RemoveT(int count) where T : class, IReference, new(){GetReferenceCollection(typeof(T)).Remove(count);}public static void RemoveAllT() 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 GetCurrUsingRefCountT() where T : class, IReference, new(){return GetReferenceCollection(typeof(T)).CurrUsingRefCount;}public static int GetAcquireRefCountT() where T : class, IReference, new(){return GetReferenceCollection(typeof(T)).AcquireRefCount;}public static int GetReleaseRefCountT() where T : class, IReference, new(){return GetReferenceCollection(typeof(T)).ReleaseRefCount;}public static int GetAddRefCountT() where T : class, IReference, new(){return GetReferenceCollection(typeof(T)).AddRefCount;}public static int GetRemoveRefCountT() where T : class, IReference, new(){return GetReferenceCollection(typeof(T)).RemoveRefCount;}}3.测试 namespace ReferencePool {public class Program{static void Main(string[] args){TeacherData teacherData1 ReferencePool.AcquireTeacherData();teacherData1.Name zzs;teacherData1.Age 20;ReferencePool.Release(teacherData1);TeacherData teacherData2 ReferencePool.AcquireTeacherData();teacherData1.Name xxx;teacherData1.Age 18;Console.WriteLine(ReferencePool.GetCurrUsingRefCountTeacherData());Console.WriteLine(ReferencePool.GetAcquireRefCountTeacherData());Console.WriteLine(ReferencePool.GetReleaseRefCountTeacherData());Console.WriteLine(ReferencePool.GetAddRefCountTeacherData());Console.WriteLine(ReferencePool.GetRemoveRefCountTeacherData());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/14377864/

相关文章:

  • 如何增加网站的权重网站建设的技术指标
  • 购物网站建设ppt新开传奇网站发布网孞
  • 太仓企业网站建设长沙棋牌软件制作开发
  • html5网站模板专业的医疗网站建设
  • 网站备案进度查询开发利用水资源
  • wordpress站点地址和不是网站建设必须经历的过程
  • 最近下载的网站怎么找厦门网站建设和人才库建设
  • 网站关键词排名忽然网站加载很慢怎么办
  • 昆山做网站需要多少钱微信公众平台注册平台
  • 网站建设价位物流公司前十名排行榜
  • 天津制作企业网站wordpress 插件 备忘录
  • iis怎么设置网站怎么更改网页上的内容
  • 网站建设品牌营销建网站的公司有哪些
  • 网站里面送礼物要钱怎么做代码营销策划公司怎么收费
  • 吉林省做网站公司四川建设厅网站施工员证查询
  • 网站推广制作网站开发的研究方法
  • 圣辉友联北京网站建设公司阿里虚拟主机怎么做两个网站
  • 陕西免费网站建设济南网站制做
  • 网站要钱怎么一个公司主体可以在多个网站做备案
  • 沧州网站建设方案咨询网球排名即时最新排名
  • 建设行业的门户网站东莞常平中学智慧校园应用中心
  • 网站备案模板网站防止采集
  • 黄岛网站建设服务公司建设银行信用卡申请网站
  • 做网站优化有什么好处外国网站界面
  • 三明建设局网站大连建设网球场价格
  • 宣传类的网站有哪些官网推广运营的步骤有哪些
  • 京推推cms网站建设免费云服务器永久使用下载
  • 中山网站建设设计效果图哪个网站好
  • 农庄网站亚马逊的网站建设
  • 达州市网站建设重庆市建设网站首页