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

本文关键字:速度 多少 理论 事件 | 更新日期: 2023-09-27 18:03:05

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

所以我很想知道c#中事件触发的理论限制,这样我就可以提前知道一个不可能的瓶颈是否正在被"设计",而这个瓶颈将在以后需要实质性的改变或更严重的问题。

下面是一些例子:

  1. 如果我告诉一个对象运行一个无限循环,除了触发一个事件什么都不做,触发频率是多少?
  2. 如果我循环链接类似的对象,使对象B收听A. fired, C收听B. fired等,A收听N.fired,多少时间将经过一个完整的回合?一般来说,事件链是如何工作的?它们通常是昂贵的还是轻量级的?
  3. 通过参数传递的数据如何影响事件频率性能。

作为一个额外的问题:在c#中是否存在实时、多线程数据采集的"设计模式"?

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

c#事件是在它们被引发的同一个线程上被分派的,所以它将和你的计算机能运行的一样快。没有调度器工作在运行,没有唤醒线程。如果不在您的机器上进行测试,就无法准确地回答频率问题,并且它可以根据您的机器进行缩放。与处理事件所花费的时间相比,引发事件所花费的时间微不足道。

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

如果你的设计需要多线程,你需要关注调度器细节和线程间通信,而不是事件性能。

最后,我觉得使用c#并关注这些底层细节很奇怪。实时系统的定义是响应时间得到保证的系统,而c#是垃圾收集的,因此您无法对响应时间做出非常强的保证。如果您非常担心向函数传递参数的成本,我认为您应该考虑其他可以实际控制这些细节的语言。