我即将开始一个实时数据传输和可视化是核心功能的项目。数字流将通过USB接收并绘制在屏幕上。很可能会收听某种DataReceived(some_data)
事件。
所以我很想知道C#中事件发生的理论限制,这样我就可以事先知道一个不可能出现的瓶颈是什么?#34; disigned"这将在以后需要实质性的改变或更严重的问题。
以下是一些示例情况:
作为一个奖励问题:是否存在"设计模式"用于C#中的实时多线程数据采集?
答案 0 :(得分:3)
C#事件在它们被引发的同一个线程上被调度,因此它将与您的计算机运行它一样快。调度程序没有工作,没有唤醒线程。如果不在机器上进行测试,则无法准确回答频率问题,并且它可以随机器一起扩展。与您处理事件所花费的时间相比,筹集活动所花费的时间是微不足道的。
将参数传递给事件与将参数传递给函数调用大致相同,并且JIT决定低级调用约定。最糟糕的情况是每个参数都在堆栈上传递。
如果您的设计需要多线程,则需要注意调度程序详细信息和线程间通信,而不是事件性能。
最后,对我来说,使用C#并关注这些低级细节让我感到很奇怪。实时系统的定义是一个保证响应时间,C#被垃圾收集的系统,你不能对响应时间做出非常强有力的保证。如果您非常担心将参数传递给函数的成本,我认为您应该考虑其他可以实际控制这些细节的语言。