Skip to content

Commit 6a87db7

Browse files
committed
优化局部单位事件分发器ActorEventDispatcher,EventRegInfo池化
优化局部单位事件分发器ActorEventDispatcher,EventRegInfo池化
1 parent 3a6170d commit 6a87db7

File tree

1 file changed

+34
-4
lines changed

1 file changed

+34
-4
lines changed

UnityProject/Assets/TEngine/Runtime/Core/GameEvent/ActorEventDispatcher.cs

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@ public void DestroyAllEventListener()
6060
while (itr.MoveNext())
6161
{
6262
var kv = itr.Current;
63+
List<EventRegInfo> list = kv.Value;
64+
foreach (var eventRegInfo in list)
65+
{
66+
EventRegInfo.Release(eventRegInfo);
67+
}
6368
kv.Value.Clear();
6469
}
6570

@@ -97,6 +102,7 @@ private void CheckDelayDelete(int eventId)
97102
{
98103
Log.Info("remove delay delete eventId[{0}]", eventId);
99104
listListener[i] = listListener[^1];
105+
EventRegInfo.Release(listListener[i]);
100106
listListener.RemoveAt(listListener.Count - 1);
101107
i--;
102108
}
@@ -437,7 +443,7 @@ private void AddEventListenerImp(int eventId, Delegate listener, object owner)
437443
return;
438444
}
439445

440-
listListener.Add(new EventRegInfo(listener, owner));
446+
listListener.Add(EventRegInfo.Alloc(listener, owner));
441447
}
442448

443449
/// <summary>
@@ -469,6 +475,7 @@ public void RemoveAllListenerByOwner(object owner)
469475
else
470476
{
471477
list[i] = list[^1];
478+
EventRegInfo.Release(list[i]);
472479
list.RemoveAt(list.Count - 1);
473480
i--;
474481
}
@@ -587,17 +594,17 @@ public void Clear()
587594
/// <summary>
588595
/// 事件注册信息。
589596
/// </summary>
590-
public class EventRegInfo
597+
public class EventRegInfo : IMemory
591598
{
592599
/// <summary>
593600
/// 事件回调。
594601
/// </summary>
595-
public readonly Delegate Callback;
602+
public Delegate Callback;
596603

597604
/// <summary>
598605
/// 事件持有者。
599606
/// </summary>
600-
public readonly object Owner;
607+
public object Owner;
601608

602609
/// <summary>
603610
/// 事件是否删除。
@@ -610,5 +617,28 @@ public EventRegInfo(Delegate callback, object owner)
610617
Owner = owner;
611618
IsDeleted = false;
612619
}
620+
621+
public EventRegInfo() { }
622+
623+
public void Clear()
624+
{
625+
Callback = null;
626+
Owner = null;
627+
IsDeleted = false;
628+
}
629+
630+
public static EventRegInfo Alloc(Delegate callback, object owner)
631+
{
632+
EventRegInfo ret = MemoryPool.Acquire<EventRegInfo>();
633+
ret.Callback = callback;
634+
ret.Owner = owner;
635+
ret.IsDeleted = false;
636+
return ret;
637+
}
638+
639+
public static void Release(EventRegInfo eventRegInfo)
640+
{
641+
MemoryPool.Release(eventRegInfo);
642+
}
613643
}
614644
}

0 commit comments

Comments
 (0)