ListPool怎么用

这篇文章主要介绍“ListPool怎么用”,在日常操作中,相信很多人在ListPool怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ListPool怎么用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

濉溪ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

是什么

ListPool是Unity的UISystem源码中的List对象池,它是由ObjectPool扩展而来的。具体源码如下

using System;
using System.Collections.Generic;
using UnityEngine;

namespace UnityEngine.UI
{
   internal static class ListPool
   {
       // Object pool to avoid allocations.
       private static readonly ObjectPool> s_ListPool = new ObjectPool>(null, Clear);
       static void Clear(List l) { l.Clear(); }

       public static List Get()
       {
           return s_ListPool.Get();
       }

       public static void Release(List toRelease)
       {
           s_ListPool.Release(toRelease);
       }
   }
}

为什么

List是在游戏中经常会用到的数据结构,比如需要读取表格数据载入关卡表中的各项关卡,还有平时需要用到List的时候都需要临时new一个,后面的销毁完全交给C#。这种方式会导致不必要的GC,游戏中临时使用的List都应该考虑使用ListPool,而不是直接取new一个出来,List通过ListPool去管理。

怎么做

创建时调用

List m_Positions = ListPool.Get();

销毁时调用

ListPool.Release(m_Positions);

需要注意的是,创建和销毁一定要成对出现,不然就失去了循环利用的效果了。

ListPool继承自ObjectPool,因此内部也是一个Stack(last-in-first-out (LIFO))后进先出的结构,当我们需要新建(Get)一个新的List的时候,先从Stack的堆顶取出第一个,当使用结束的时候将List释放掉(Release),也就是将其重新放回Stack堆里面。ListPool里面设置了Get的回调为null,Release时候的回调为List.Clear()函数,将List置空。

到此,关于“ListPool怎么用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


本文标题:ListPool怎么用
网页路径:http://scyanting.com/article/gogogj.html