mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
优化局部单位事件分发器ActorEventDispatcher,EventRegInfo池化
优化局部单位事件分发器ActorEventDispatcher,EventRegInfo池化
This commit is contained in:
@@ -60,6 +60,11 @@ namespace TEngine
|
|||||||
while (itr.MoveNext())
|
while (itr.MoveNext())
|
||||||
{
|
{
|
||||||
var kv = itr.Current;
|
var kv = itr.Current;
|
||||||
|
List<EventRegInfo> list = kv.Value;
|
||||||
|
foreach (var eventRegInfo in list)
|
||||||
|
{
|
||||||
|
EventRegInfo.Release(eventRegInfo);
|
||||||
|
}
|
||||||
kv.Value.Clear();
|
kv.Value.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,6 +102,7 @@ namespace TEngine
|
|||||||
{
|
{
|
||||||
Log.Info("remove delay delete eventId[{0}]", eventId);
|
Log.Info("remove delay delete eventId[{0}]", eventId);
|
||||||
listListener[i] = listListener[^1];
|
listListener[i] = listListener[^1];
|
||||||
|
EventRegInfo.Release(listListener[i]);
|
||||||
listListener.RemoveAt(listListener.Count - 1);
|
listListener.RemoveAt(listListener.Count - 1);
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
@@ -437,7 +443,7 @@ namespace TEngine
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
listListener.Add(new EventRegInfo(listener, owner));
|
listListener.Add(EventRegInfo.Alloc(listener, owner));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -469,6 +475,7 @@ namespace TEngine
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
list[i] = list[^1];
|
list[i] = list[^1];
|
||||||
|
EventRegInfo.Release(list[i]);
|
||||||
list.RemoveAt(list.Count - 1);
|
list.RemoveAt(list.Count - 1);
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
@@ -587,17 +594,17 @@ namespace TEngine
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 事件注册信息。
|
/// 事件注册信息。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class EventRegInfo
|
public class EventRegInfo : IMemory
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 事件回调。
|
/// 事件回调。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public readonly Delegate Callback;
|
public Delegate Callback;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 事件持有者。
|
/// 事件持有者。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public readonly object Owner;
|
public object Owner;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 事件是否删除。
|
/// 事件是否删除。
|
||||||
@@ -610,5 +617,28 @@ namespace TEngine
|
|||||||
Owner = owner;
|
Owner = owner;
|
||||||
IsDeleted = false;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user