C#.NET可以用于硬实时吗?

时间:2014-09-06 17:06:59

标签: c# .net real-time

鉴于熟悉的.NET形式是在Windows上运行的,而不是实时操作系统,而且MONO在Linux上运行(标准内核也不是实时O / S)。

同样,任何提供垃圾收集的内存分配方案(如“托管”.NET),以及任何堆内存方案都会在应用程序的执行行为中引入非确定性的,可能非平凡的延迟。

是否存在备用主机O / S和编码范例的任意组合,其中可以利用C#.NET的所有功能和便利,同时实现可以在严格指定的时间限制内执行代码的指定部分的解决方案?例如每10ms启动一次C#方法,容差小于1ms,完成时间仅由方法本身的工作决定?

显然,申请必须仔细编写;时间关键代码必须避免内存分配;应用程序必须完成所有内存分配等工作,并且在启动硬实时循环后没有其他线程处于活动状态。此外,主机O / S必须支持实时调度。

这是否可以在.NET / MONO框架内实现,或者是否支持.NET运行时,框架和支持它(或兼容的等效)的O / S?

例如:是否可以使用类似NETduino的C#进行可靠的细粒度(~1ms)机器控制,或者它们是否有限制或需要替代策略用于此类应用?

1 个答案:

答案 0 :(得分:8)

简答:不。

更长的答案:您可以获得的最接近的是直接在硬件上运行.net Micro Framework,但TinyCLR仍然没有给您确定的时间。微软有Windows CE/Windows Embedded Compact作为他们的实时产品,但即使这只是实时较慢的任务(我认为在50微秒或更长的范围内 - 不确定是否符合硬实时)

我不知道在技术上是否有可能创建一个实时的c#实现,但是没有人做过,甚至.net native也没有做到。