Skip to content

Commit 52b3c78

Browse files
author
Jiang Yin
committed
优化GCAlloc
1 parent 9bd49e8 commit 52b3c78

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

GameFramework/ObjectPool/ObjectPoolManager.ObjectPool.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,8 @@ internal override void Shutdown()
498498

499499
m_Objects.Clear();
500500
m_ObjectMap.Clear();
501+
m_CachedCanReleaseObjects.Clear();
502+
m_CachedToReleaseObjects.Clear();
501503
}
502504

503505
private Object<T> GetObject(object target)

GameFramework/ObjectPool/ObjectPoolManager.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@ internal sealed partial class ObjectPoolManager : GameFrameworkModule, IObjectPo
2020
private const int DefaultPriority = 0;
2121

2222
private readonly Dictionary<TypeNamePair, ObjectPoolBase> m_ObjectPools;
23+
private readonly List<ObjectPoolBase> m_CachedAllObjectPools;
2324

2425
/// <summary>
2526
/// 初始化对象池管理器的新实例。
2627
/// </summary>
2728
public ObjectPoolManager()
2829
{
2930
m_ObjectPools = new Dictionary<TypeNamePair, ObjectPoolBase>();
31+
m_CachedAllObjectPools = new List<ObjectPoolBase>();
3032
}
3133

3234
/// <summary>
@@ -76,6 +78,7 @@ internal override void Shutdown()
7678
}
7779

7880
m_ObjectPools.Clear();
81+
m_CachedAllObjectPools.Clear();
7982
}
8083

8184
/// <summary>
@@ -1206,8 +1209,8 @@ public bool DestroyObjectPool(ObjectPoolBase objectPool)
12061209
/// </summary>
12071210
public void Release()
12081211
{
1209-
ObjectPoolBase[] objectPools = GetAllObjectPools(true);
1210-
foreach (ObjectPoolBase objectPool in objectPools)
1212+
GetAllObjectPools(true, m_CachedAllObjectPools);
1213+
foreach (ObjectPoolBase objectPool in m_CachedAllObjectPools)
12111214
{
12121215
objectPool.Release();
12131216
}
@@ -1218,8 +1221,8 @@ public void Release()
12181221
/// </summary>
12191222
public void ReleaseAllUnused()
12201223
{
1221-
ObjectPoolBase[] objectPools = GetAllObjectPools(true);
1222-
foreach (ObjectPoolBase objectPool in objectPools)
1224+
GetAllObjectPools(true, m_CachedAllObjectPools);
1225+
foreach (ObjectPoolBase objectPool in m_CachedAllObjectPools)
12231226
{
12241227
objectPool.ReleaseAllUnused();
12251228
}

0 commit comments

Comments
 (0)