From 6a87db76eed721fbc3de26d9b13dc3916823ea75 Mon Sep 17 00:00:00 2001 From: ALEXTANG <574809918@qq.com> Date: Fri, 15 Dec 2023 15:11:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=B1=80=E9=83=A8=E5=8D=95?= =?UTF-8?q?=E4=BD=8D=E4=BA=8B=E4=BB=B6=E5=88=86=E5=8F=91=E5=99=A8ActorEven?= =?UTF-8?q?tDispatcher=EF=BC=8CEventRegInfo=E6=B1=A0=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化局部单位事件分发器ActorEventDispatcher,EventRegInfo池化 --- .../Core/GameEvent/ActorEventDispatcher.cs | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/UnityProject/Assets/TEngine/Runtime/Core/GameEvent/ActorEventDispatcher.cs b/UnityProject/Assets/TEngine/Runtime/Core/GameEvent/ActorEventDispatcher.cs index e446596f..6ba41996 100644 --- a/UnityProject/Assets/TEngine/Runtime/Core/GameEvent/ActorEventDispatcher.cs +++ b/UnityProject/Assets/TEngine/Runtime/Core/GameEvent/ActorEventDispatcher.cs @@ -60,6 +60,11 @@ namespace TEngine while (itr.MoveNext()) { var kv = itr.Current; + List list = kv.Value; + foreach (var eventRegInfo in list) + { + EventRegInfo.Release(eventRegInfo); + } kv.Value.Clear(); } @@ -97,6 +102,7 @@ namespace TEngine { Log.Info("remove delay delete eventId[{0}]", eventId); listListener[i] = listListener[^1]; + EventRegInfo.Release(listListener[i]); listListener.RemoveAt(listListener.Count - 1); i--; } @@ -437,7 +443,7 @@ namespace TEngine return; } - listListener.Add(new EventRegInfo(listener, owner)); + listListener.Add(EventRegInfo.Alloc(listener, owner)); } /// @@ -469,6 +475,7 @@ namespace TEngine else { list[i] = list[^1]; + EventRegInfo.Release(list[i]); list.RemoveAt(list.Count - 1); i--; } @@ -587,17 +594,17 @@ namespace TEngine /// /// 事件注册信息。 /// - public class EventRegInfo + public class EventRegInfo : IMemory { /// /// 事件回调。 /// - public readonly Delegate Callback; + public Delegate Callback; /// /// 事件持有者。 /// - public readonly object Owner; + public object Owner; /// /// 事件是否删除。 @@ -610,5 +617,28 @@ namespace TEngine Owner = owner; IsDeleted = false; } + + public EventRegInfo() { } + + public void Clear() + { + Callback = null; + Owner = null; + IsDeleted = false; + } + + public static EventRegInfo Alloc(Delegate callback, object owner) + { + EventRegInfo ret = MemoryPool.Acquire(); + ret.Callback = callback; + ret.Owner = owner; + ret.IsDeleted = false; + return ret; + } + + public static void Release(EventRegInfo eventRegInfo) + { + MemoryPool.Release(eventRegInfo); + } } } \ No newline at end of file