91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ListPool怎么用

發布時間:2021-12-18 14:09:30 來源:億速云 閱讀:175 作者:iii 欄目:大數據

這篇文章主要介紹“ListPool怎么用”,在日常操作中,相信很多人在ListPool怎么用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ListPool怎么用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

是什么

ListPool是Unity的UISystem源碼中的List對象池,它是由ObjectPool 擴展而來的。具體源碼如下

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

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

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

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

為什么

List是在游戲中經常會用到的數據結構,比如需要讀取表格數據載入關卡表中的各項關卡,還有平時需要用到List的時候都需要臨時new一個,后面的銷毀完全交給C#。這種方式會導致不必要的GC,游戲中臨時使用的List都應該考慮使用ListPool,而不是直接取new一個出來,List通過ListPool去管理。

怎么做

創建時調用

List<Vector3> m_Positions = ListPool<Vector3>.Get();

銷毀時調用

ListPool<Vector3>.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怎么用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

皮山县| 永康市| 陆良县| 岳阳县| 新疆| 昌黎县| 漳州市| 昔阳县| 安西县| 昭平县| 方正县| 临沧市| 桐城市| 嘉兴市| 缙云县| 康保县| 靖江市| 鹿泉市| 清远市| 肃北| 陵水| 齐齐哈尔市| 泾源县| 溧阳市| 新宁县| 滨州市| 怀集县| 商洛市| 尼勒克县| 黄梅县| 安宁市| 龙门县| 阳西县| 郑州市| 肇源县| 讷河市| 新宾| 屏山县| 彭州市| 正阳县| 神池县|