一个事件可以拥有多少个侦听器是否有限制?
你有多少内存?;p 就您所说的数字而言,应该没问题-但坦率地说,我认为这不是一个好方法。但:
static void Main()
{
EventHandler handler = null;
for (int i = 0; i < 6000000; i++)
{
var obj = new Spoof();
handler += obj.Bar;
if ((i % 1000) == 0) Console.WriteLine(i);
}
Console.WriteLine("done");
Console.ReadKey();
handler(null, null);
}
class Spoof
{
public void Bar(object sender, EventArgs args) { Console.WriteLine("hi"); }
}
如果是这样,限制是什么?性能将如何下降?
基本上,近似线性。
但是,我真的不认为这种方法是理想的 - 它存在诸如仅限于单个应用程序域(使其难以在节点之间分配)等问题,并且在使用事件时很容易出现意外的内存场景,例如那。此外,取消订阅会变得非常昂贵,因为它需要扫描订阅者列表。
就个人而言,我会使用 redis pub/sub 之类的东西,或者其他一些专用的 pub/sub 系统。董事会可以订阅他们感兴趣的火车(或线路),而火车(或线路)只是广播到那些指定的频道。