我已經在Delphi 7中編寫了一個程序(包括使用Indy的ModBus組件)。在我的機器上它使用Indy 9並且工作正常。它通過ModBus協議與其他機器進行良好的通信。但是,當程序在另一臺機器上運行時,CPU的負載爲90-100%。不幸的是,這臺機器不在我的辦公室,而是「在世界的另一邊」。我怎麼知道這臺機器是使用Indy 9還是Indy 10?而且,如果它正在運行Indy 10,那可能是問題還是不太可能?如果我寫了Indy 9,我的程序是否可以在客戶現場使用Indy 10?
1
A
回答
1
要找出什麼導致高CPU負載,你可以試試像AQTime或SamplingProfiler這樣的分析器。
這將爲您提供大部分時間運行的方法。然後你將能夠找出造成問題的原因。
另外,你可以添加一些日誌到你的應用程序。
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也可以幫助您。
個人我總是默認添加日誌記錄到每個應用程序,它們中的很多需要打開,但它在那裏。一旦它的網站上的軟件,你永遠不知道什麼可能會改變,只需打開日誌可以節省您很多時間
相關問題
- 1. 將Delphi 7 Indy 9應用程序升級到Indy 10(II)
- 2. 升級Delphi 7 Indy 9應用程序。 Indy 10
- 3. Indy 10與德爾福2006年:可行嗎?投入Indy 9應用程序?
- 4. 將Delphi代碼的Indy 10寫入C++ Builder的Indy 10
- 5. 我可以從Delphi的Indy客戶端發送TCP RST嗎?
- 6. Indy 10 + Delphi客戶端 - 服務器應用程序吃掉了所有CPU
- 7. Indy 10:Undeclared Identifier'TIdBytes'
- 8. Indy 10和OpenSSL
- 9. Indy 10和sslvTLSv1_2
- 10. 可以將Delphi 6升級到Indy 9或10嗎?
- 11. 德爾福使用Indy 10
- 12. 使用FastMM4和Indy 10
- 13. 如何利用Indy 10
- 14. 使用INDY開發客戶端服務器應用程序
- 15. Delphi XE3 indy 10 UDP
- 16. Indy 10 for Delphi 7
- 17. Delphi 7 Indy 10 ioHandler
- 18. Delphi 7 + Indy +多線程客戶端
- 19. Delphi Indy 9和10:TraceSSL:TLS的日誌是什麼樣的?
- 20. 我可以在Visual C++中使用Indy套接字嗎?
- 21. 我可以在OnExecute事件(Indy)中使用IdHTTP嗎?
- 22. TIdTCPServer多播(Indy 9 + Delphi 7)
- 23. 利用Indy 10 IdHTTP使用TLS 1.2
- 24. Indy TIdSSLIOHandlerSocketOpenSSL實現
- 25. 是否可以聯繫我們的應用程序的客戶?
- 26. 我在哪裏可以找到每個組件的indy 10個演示?
- 27. 如何使Indy 10 TIdTCPClient阻止呼叫?
- 28. 使用INDY 10與Exchange SMTP服務器
- 29. 使用INDY SMTPSERVER
- 30. Indy 10 TCP命令處理程序是異步的嗎?
您是否在談論部署的可執行文件?是不是所有東西都編譯成可執行文件? – 2011-02-02 08:47:44
是的,即使他使用運行時軟件包,它也必須是與編譯時相同的Indy版本。 – 2011-02-02 08:53:08