12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- using System.Collections.Generic;
- using System.Threading;
- namespace CombatLibrary.CombatLibrary.CombatCore
- {
- public class CombatPool<T> where T : new()
- {
- private List<T> allPool = new List<T>();
- public int count = 1000;
- private HashSet<int> _map = new HashSet<int>();
- public T Get()
- {
- // lock (allPool)
- {
- if (allPool.Count > 0)
- {
- T betterList = allPool[0];
- allPool.RemoveAt(0);
- // System.GC.ReRegisterForFinalize(betterList);
- int code = betterList.GetHashCode();
- _map.Remove(code);
-
- return betterList;
- }
- else
- {
- T betterList = new T();
- return betterList;
- }
- }
- }
- public void Clear()
- {
- allPool.Clear();
- _map.Clear();
- }
- public void Recycle(T a)
- {
- if (a != null)
- {
- // lock (allPool)
- {
- int code = a.GetHashCode();
- if (_map.Count > 1000)
- {
- return;
- }
- if (!_map.Contains(code))
- {
- // System.GC.SuppressFinalize(a);
- allPool.Add(a);
- _map.Add(code);
- }
- }
- }
- }
- }
- }
|