@@ -60,6 +60,11 @@ public void DestroyAllEventListener()
60
60
while ( itr . MoveNext ( ) )
61
61
{
62
62
var kv = itr . Current ;
63
+ List < EventRegInfo > list = kv . Value ;
64
+ foreach ( var eventRegInfo in list )
65
+ {
66
+ EventRegInfo . Release ( eventRegInfo ) ;
67
+ }
63
68
kv . Value . Clear ( ) ;
64
69
}
65
70
@@ -97,6 +102,7 @@ private void CheckDelayDelete(int eventId)
97
102
{
98
103
Log . Info ( "remove delay delete eventId[{0}]" , eventId ) ;
99
104
listListener [ i ] = listListener [ ^ 1 ] ;
105
+ EventRegInfo . Release ( listListener [ i ] ) ;
100
106
listListener . RemoveAt ( listListener . Count - 1 ) ;
101
107
i -- ;
102
108
}
@@ -437,7 +443,7 @@ private void AddEventListenerImp(int eventId, Delegate listener, object owner)
437
443
return ;
438
444
}
439
445
440
- listListener . Add ( new EventRegInfo ( listener , owner ) ) ;
446
+ listListener . Add ( EventRegInfo . Alloc ( listener , owner ) ) ;
441
447
}
442
448
443
449
/// <summary>
@@ -469,6 +475,7 @@ public void RemoveAllListenerByOwner(object owner)
469
475
else
470
476
{
471
477
list [ i ] = list [ ^ 1 ] ;
478
+ EventRegInfo . Release ( list [ i ] ) ;
472
479
list . RemoveAt ( list . Count - 1 ) ;
473
480
i -- ;
474
481
}
@@ -587,17 +594,17 @@ public void Clear()
587
594
/// <summary>
588
595
/// 事件注册信息。
589
596
/// </summary>
590
- public class EventRegInfo
597
+ public class EventRegInfo : IMemory
591
598
{
592
599
/// <summary>
593
600
/// 事件回调。
594
601
/// </summary>
595
- public readonly Delegate Callback ;
602
+ public Delegate Callback ;
596
603
597
604
/// <summary>
598
605
/// 事件持有者。
599
606
/// </summary>
600
- public readonly object Owner ;
607
+ public object Owner ;
601
608
602
609
/// <summary>
603
610
/// 事件是否删除。
@@ -610,5 +617,28 @@ public EventRegInfo(Delegate callback, object owner)
610
617
Owner = owner ;
611
618
IsDeleted = false ;
612
619
}
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
+ }
613
643
}
614
644
}
0 commit comments