2011-02-02 21 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也可以幫助您。

個人我總是默認添加日誌記錄到每個應用程序,它們中的很多需要打開,但它在那裏。一旦它的網站上的軟件,你永遠不知道什麼可能會改變,只需打開日誌可以節省您很多時間