跨AppDomain信令的最高性能

Joe*_*Joe 7 .net c# notifications multithreading appdomain

我的性能敏感应用程序使用MemoryMappedFiles在许多AppDomain之间推送批量数据.我需要最快的机制来向接收AD发出信号,表明有新数据需要读取.

设计看起来像这样:

AD 1:写入MMF,写入数据时应通知读者AD

AD 2,3,N ..:MMF的读者

读者不需要知道写入了多少数据,因为每个写入的消息都将以非零int开头,并且它将读取为零,不用担心部分写入的消息.

(我认为)传统上,在单个AD中,Monitor.Wait/Pulse可用于此,我认为它不适用于AppDomains.

也可以使用MarshalByRefObject远程处理方法或事件,但我希望更快.(我在我的机器上测试了1,000,000 MarshalByRefObject调用/秒,不错,但我想要更多)

命名的EventWaitHandle大约是初始测量速度的两倍.

有什么更快的吗?

注意:只要最后一个信号没有丢失,接收AD就不需要获取每个信号.

Joe*_*Joe 1

命名的 EventWaitHandle 是获取单向信号的方法(为了实现最低延迟)。根据我的测量,比跨应用程序域方法调用快 2 倍。在迄今为止的最新版本的 CLR 中,方法调用性能非常令人印象深刻 (4),并且对于大多数情况来说应该最有意义,因为可以在方法调用中传递一些信息(在我的例子中,有多少数据)读书)

如果可以在接收端连续烧毁线程,并且性能至关重要,那么紧密循环可能会更快。

我希望微软继续改进跨应用程序域功能,因为它可以真正帮助提高应用程序可靠性和插件。