Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于连接GPS设备的C#TCP服务器_C# - Fatal编程技术网

用于连接GPS设备的C#TCP服务器

用于连接GPS设备的C#TCP服务器,c#,C#,我想开发一个TCP服务器,它将接受大约5000个GPS客户端连接。目前,我开发了一个简单的多线程TCP服务器,它甚至无法处理100个客户端。它消耗了大约98%的CPU。可能存在什么问题?实现此目的的最佳方法是什么?您需要使用异步套接字API。每个连接一个线程无法缩放 这将需要将大量现有代码重写为异步。除非您告诉我们更多关于您的应用程序的信息,否则我们不可能调试该问题。在解决问题时,多线程几乎肯定是错误的答案。您可以运行CPU探查器,查看应用程序在哪里花费了98%的CPU在我的程序中,我使用TCP

我想开发一个TCP服务器,它将接受大约5000个GPS客户端连接。目前,我开发了一个简单的多线程TCP服务器,它甚至无法处理100个客户端。它消耗了大约98%的CPU。可能存在什么问题?实现此目的的最佳方法是什么?

您需要使用异步套接字API。每个连接一个线程无法缩放


这将需要将大量现有代码重写为异步。

除非您告诉我们更多关于您的应用程序的信息,否则我们不可能调试该问题。在解决问题时,多线程几乎肯定是错误的答案。您可以运行CPU探查器,查看应用程序在哪里花费了98%的CPU在我的程序中,我使用TCP侦听器接受客户端连接(每个连接一个线程)。第一个设备发送其唯一id。之后,服务器发送响应。在得到正确的响应后,设备发送gps数据,服务器必须解析并将其放入数据库。我可以使用的最好的机制是什么?我已经尝试过异步套接字API。但问题是一样的。它消耗大量的cpu。您能告诉我可能的原因吗?您的消息处理可能是CPU受限的。您需要使用性能监视工具来确定确切的原因。我使用点跟踪来监视cpu使用情况,发现Network.Read()在同步机制中花费了更多的时间。所以,我先介绍了Thread.sleep。现在它不需要太多cpu,但随着时间的推移,活动线程的数量正在增加。我尝试使用Abort()强制关闭线程。但是没有区别,这有很多错误。为什么经常调用
Read
?您是否未正确处理从<代码>读取<代码>返回的零<代码>睡眠不应该是必需的,并且绝对不应该使用
中止