mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-25 04:59:01 +08:00
perf(GFramework.Core): 优化PriorityEvent事件处理器性能
- 在MergeAndSortHandlers方法中创建_handlers和_contextHandlers的快照副本 - 避免在迭代期间直接访问集合可能发生的修改问题 - 提高事件处理时的性能表现和稳定性
This commit is contained in:
parent
78e0c75641
commit
c454fa1acf
@ -191,11 +191,13 @@ public class PriorityEvent<T> : IEvent
|
|||||||
private List<(int Priority, Action? Handler, Action<EventContext<T>>? ContextHandler, bool IsContext)>
|
private List<(int Priority, Action? Handler, Action<EventContext<T>>? ContextHandler, bool IsContext)>
|
||||||
MergeAndSortHandlers(T t)
|
MergeAndSortHandlers(T t)
|
||||||
{
|
{
|
||||||
|
var normalSnapshot = _handlers.ToArray();
|
||||||
|
var contextSnapshot = _contextHandlers.ToArray();
|
||||||
// 使用快照避免迭代期间修改
|
// 使用快照避免迭代期间修改
|
||||||
return _handlers
|
return normalSnapshot
|
||||||
.Select(h => (h.Priority, Handler: (Action?)(() => h.Handler.Invoke(t)),
|
.Select(h => (h.Priority, Handler: (Action?)(() => h.Handler.Invoke(t)),
|
||||||
ContextHandler: (Action<EventContext<T>>?)null, IsContext: false))
|
ContextHandler: (Action<EventContext<T>>?)null, IsContext: false))
|
||||||
.Concat(_contextHandlers
|
.Concat(contextSnapshot
|
||||||
.Select(h => (h.Priority, Handler: (Action?)null,
|
.Select(h => (h.Priority, Handler: (Action?)null,
|
||||||
ContextHandler: (Action<EventContext<T>>?)h.Handler, IsContext: true)))
|
ContextHandler: (Action<EventContext<T>>?)h.Handler, IsContext: true)))
|
||||||
.OrderByDescending(h => h.Priority)
|
.OrderByDescending(h => h.Priority)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user