Skip to content

Commit

Permalink
优化局部单位事件分发器ActorEventDispatcher,EventRegInfo池化
Browse files Browse the repository at this point in the history
优化局部单位事件分发器ActorEventDispatcher,EventRegInfo池化
  • Loading branch information
Alex-Rachel committed Dec 15, 2023
1 parent 3a6170d commit 6a87db7
Showing 1 changed file with 34 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ public void DestroyAllEventListener()
while (itr.MoveNext())
{
var kv = itr.Current;
List<EventRegInfo> list = kv.Value;
foreach (var eventRegInfo in list)
{
EventRegInfo.Release(eventRegInfo);
}
kv.Value.Clear();
}

Expand Down Expand Up @@ -97,6 +102,7 @@ private void CheckDelayDelete(int eventId)
{
Log.Info("remove delay delete eventId[{0}]", eventId);
listListener[i] = listListener[^1];
EventRegInfo.Release(listListener[i]);
listListener.RemoveAt(listListener.Count - 1);
i--;
}
Expand Down Expand Up @@ -437,7 +443,7 @@ private void AddEventListenerImp(int eventId, Delegate listener, object owner)
return;
}

listListener.Add(new EventRegInfo(listener, owner));
listListener.Add(EventRegInfo.Alloc(listener, owner));
}

/// <summary>
Expand Down Expand Up @@ -469,6 +475,7 @@ public void RemoveAllListenerByOwner(object owner)
else
{
list[i] = list[^1];
EventRegInfo.Release(list[i]);
list.RemoveAt(list.Count - 1);
i--;
}
Expand Down Expand Up @@ -587,17 +594,17 @@ public void Clear()
/// <summary>
/// 事件注册信息。
/// </summary>
public class EventRegInfo
public class EventRegInfo : IMemory
{
/// <summary>
/// 事件回调。
/// </summary>
public readonly Delegate Callback;
public Delegate Callback;

/// <summary>
/// 事件持有者。
/// </summary>
public readonly object Owner;
public object Owner;

/// <summary>
/// 事件是否删除。
Expand All @@ -610,5 +617,28 @@ public EventRegInfo(Delegate callback, object owner)
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<EventRegInfo>();
ret.Callback = callback;
ret.Owner = owner;
ret.IsDeleted = false;
return ret;
}

public static void Release(EventRegInfo eventRegInfo)
{
MemoryPool.Release(eventRegInfo);
}
}
}

0 comments on commit 6a87db7

Please sign in to comment.