Delphi TIdTcpServer多客户端定时请求连接、发数据,取固定几个客户端上传数据时CPU占用率高怎么解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi TIdTcpServer多客户端定时请求连接、发数据,取固定几个客户端上传数据时CPU占用率高怎么解决?相关的知识,希望对你有一定的参考价值。

使用Delphi 2009 Indy 10.1.1.1版本,22个客户端自动隔段时间通过管理机向我发送连接请求,我已在OnConnection中DisConnect不用的客户端15个(客户端仍然会发送连接请求),读取固定7个客户端向我发送的数据。我需要对数据进行译码、存储、显示。但CPU占用率仍然很高,基本在10%——50%,。客户端通讯方式已固定,我如何修改自己的代码,以减小CPU占用率?
我怀疑CPU占用率高和读取数据这个过程和客户端连接请求应该有关系。

检查CPU占用高的代码是哪一段,逐步注释后来查看哪段代码占用CPU即可。优化该段代码。
理论上,你才22个客户端,在socket上应该不会消耗太多CPU。

可能是你的解码上消耗较多CPU吧?追问

抱歉写错了。我用的是ReceiveBytes读数据。

参考技术A 对数据进行译码、存储、显示增加临界区试试。追问

我现在采用最简单的,使用ReceiveBytes接收到数据,然后以十六进制字符显示在demo中

delphi中如何实现多线程socket通信时

参考技术A 我再说具体些,在delphi中实现收集socket通信时,应用TserverSocket类做办事器端,个中该类的ServerType属性有两个选择,分别决定办事器端是为每个客户request生成一个线程(选stThreadBlocking)照样所有的客户request都在一个线程中处理(选stNonBlocking),当我选择stThreadBlocking用线程方法时,客户端发送信息时,办事器端不克不及激活OnClientRead事宜,而被选择非线程方法时则可以实现。

以上是关于Delphi TIdTcpServer多客户端定时请求连接、发数据,取固定几个客户端上传数据时CPU占用率高怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章

定时器软件如何制作?Delphi

delphi多线程参数传递问题

在 Indy TIdTCPServer 和 TIdTCPClient 中管理异常

delphi如何做到一个自动运行的控件,如下图定时器

delphi 自动刷新

delphi如何关闭定时器