2011-02-02 40 views
1

我已经在Delphi 7中编写了一个程序(包括使用Indy的ModBus组件)。在我的机器上它使用Indy 9并且工作正常。它通过ModBus协议与其他机器进行良好的通信。但是,当程序在另一台机器上运行时,CPU的负载为90-100%。不幸的是,这台机器不在我的办公室,而是“在世界的另一边”。我怎么知道这台机器是使用Indy 9还是Indy 10?而且,如果它正在运行Indy 10,那可能是问题还是不太可能?如果我写了Indy 9,我的程序是否可以在客户现场使用Indy 10?

+0

您是否在谈论部署的可执行文件?是不是所有东西都编译成可执行文件? – 2011-02-02 08:47:44

+0

是的,即使他使用运行时软件包,它也必须是与编译时相同的Indy版本。 – 2011-02-02 08:53:08

回答

1

要找出什么导致高CPU负载,你可以试试像AQTimeSamplingProfiler这样的分析器。

这将为您提供大部分时间运行的方法。然后你将能够找出造成问题的原因。

另外,你可以添加一些日志到你的应用程序。

4

确切的答案是没有

如果用印9编译你的程序,即使使用包装的,应当INDY使用9运行。 AFAIK,没有办法使用INDY 9编译可执行文件,并且在运行时使用INDY 10,即使你想要,也不会偶然发生。

1

要找到根本原因,您可以准备一个测试应用程序,该应用程序将执行一系列操作,例如打开/关闭连接。如果在继续之前询问用户确认(“Continue?y/n”),用户可以检查每个步骤的CPU负载以检测关键操作。

0

感谢您的回答。虽然我不认为这是一个Indy问题。在我的四核CPU上,CPU负载也从1-2%上升到aprox。 25%。如果我保持线路打开(连接),就会发生这种情况。但是,如果我在ModBus CLient端每次轮询之后断开ModBus服务器的连接,并让PC重新连接,则CPU负载始终很低。什么是正常的?一直打开这条线路,或者连接并断开每个轮询?轮询频率为:空闲模式下:2000ms,主动模式下500ms。

0

您需要添加日志以确保您知道发生了什么。

它是导致你的问题的连接本身?还是连接时执行的工作?

日志将帮助您缩小范围,并且您可以将代码更改为更少的处理器。

使用AQTime或SamplingProfiler也可以帮助您。

个人我总是默认添加日志记录到每个应用程序,它们中的很多需要打开,但它在那里。一旦它的网站上的软件,你永远不知道什么可能会改变,只需打开日志可以节省您很多时间