这篇文章主要介绍“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去管理。
怎么做
创建时调用
Listm_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怎么用
网站URL:http://lswzjz.com/article/gogogj.html