c#,采用SerialPort类的DataReceived事件来接收数据,性能达不到要求,有没有更好的思路和方法。 10
展开全部
不知道你说的性能不够是指哪方面的性能。
1.如果是从设备数据发出,到程序SerialPort类的DataReceived收到时间觉得过长,那你这个系统需要的性能就太牛叉了,还是换其他方式吧,例如socket。
2.如果是设备数据发出,程序也收到。但是如果是因为你在DataReceived事件里写了大量的处理逻辑导致在两次接收数据的时间间隔之内跟不上处理,那这个,我建议你建立一个接收数据队列。在DataReceived事件里只把接收到的数据存储在队列里。然后建一个处理数据的线程,每次只从队列里取第一条进行处理,处理完之后删除。而且要优化你的处理数据线程。
不知道我说的是否够详细。
1.如果是从设备数据发出,到程序SerialPort类的DataReceived收到时间觉得过长,那你这个系统需要的性能就太牛叉了,还是换其他方式吧,例如socket。
2.如果是设备数据发出,程序也收到。但是如果是因为你在DataReceived事件里写了大量的处理逻辑导致在两次接收数据的时间间隔之内跟不上处理,那这个,我建议你建立一个接收数据队列。在DataReceived事件里只把接收到的数据存储在队列里。然后建一个处理数据的线程,每次只从队列里取第一条进行处理,处理完之后删除。而且要优化你的处理数据线程。
不知道我说的是否够详细。
追问
感谢你的回答。
我的情况是采用实际的串口来接收数据(只打开,不干其他任务),数据每20毫秒40个字节左右。cpu占用率8%左右。而采用虚拟串口,数据每1毫秒40个字节,cpu占用率却是0%左右。如何降低cpu占用率?
代码只有一句: serialPort1.Open();
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询