在C#中轮询多个设备的最有效方法

时间:2017-04-17 10:22:31

标签: c# .net multithreading task-parallel-library polling

我已经阅读了很多关于这个主题的内容,但仍然不确定该怎么做。

首先,情况:我使用.NET 4.5编写了用C语言编写的软件,它在CAN网络上轮询多达64个设备,我通过USB使用设备制造商提供的第三方API进行通信。目的是为用户提供温度,压力和其他值的实时更新,例如来自某些传感器的值。

目前,我为每个运行while循环的设备创建一个System.Threading.Thread,该循环向设备查询相关信息,通过Entity Framework保存对SQL Server的更新,然后休眠1.25秒。

在大约20个或更少设备的小型系统上运行正常,但在50多个设备的大型安装中运行速度非常慢。我认为我的问题是创建这么多线程的开销。虽然至少这一个是四核,不像我之前使用的双核处理系统,但它并没有帮助我使用蹩脚的Atom处理器。

所以,我一直试图让这个过程更有效率。我读到的所有内容似乎都指向Task.Run()是更有效的方式来做这样的事情,但这个软件可能一次运行数周或数月,我认为我需要使用TaskCreationOptions运行它.LongRunning。但我已经在这方面阅读了相互矛盾的事情,所以我不确定。但如果是这种情况,那么我的理解是TPL只会启动一个新的专用线程,所以看起来仍然会有我试图避免的开销。

所以,正如你所看到的,我对这个主题很失落。我不知道我是否应该尝试一下Task.Run(),看看会发生什么,或者我是否应该采取完全不同的方式。

非常感谢任何帮助。

谢谢。

0 个答案:

没有答案