在C#中重复触发事件的理论速度限制是多少?

时间:2014-05-13 00:08:44

标签: c# multithreading events

我即将开始一个实时数据传输和可视化是核心功能的项目。数字流将通过USB接收并绘制在屏幕上。很可能会收听某种DataReceived(some_data)事件。

所以我很想知道C#中事件发生的理论限制,这样我就可以事先知道一个不可能出现的瓶颈是什么?#34; disigned"这将在以后需要实质性的改变或更严重的问题。

以下是一些示例情况:

  1. 如果我告诉一个物体运行一个无限循环,除了发射一个事件之外什么都不做,那么发射频率是多少?
  2. 如果我循环链接相似的对象,以便对象B听A.Fired,C听B.Fired等等,A听N.fired,完整转弯需要多少时间?事件链是如何工作的?它们通常是昂贵的还是通常很轻的或什么?
  3. 通过参数传递的数据如何影响事件频率性能。
  4. 作为一个奖励问题:是否存在"设计模式"用于C#中的实时多线程数据采集?

1 个答案:

答案 0 :(得分:3)

C#事件在它们被引发的同一个线程上被调度,因此它将与您的计算机运行它一样快。调度程序没有工作,没有唤醒线程。如果不在机器上进行测试,则无法准确回答频率问题,并且它可以随机器一起扩展。与您处理事件所花费的时间相比,筹集活动所花费的时间是微不足道的。

将参数传递给事件与将参数传递给函数调用大致相同,并且JIT决定低级调用约定。最糟糕的情况是每个参数都在堆栈上传递。

如果您的设计需要多线程,则需要注意调度程序详细信息和线程间通信,而不是事件性能。

最后,对我来说,使用C#并关注这些低级细节让我感到很奇怪。实时系统的定义是一个保证响应时间,C#被垃圾收集的系统,你不能对响应时间做出非常强有力的保证。如果您非常担心将参数传递给函数的成本,我认为您应该考虑其他可以实际控制这些细节的语言。