私はDelphi 7(Indyを使用するModBusコンポーネントを含む)でプログラムを作成しました。私のマシンでは、Indy 9を使用し、うまく動作します。これは、ModBusプロトコルを介して他のマシンとうまく通信します。しかし、プログラムが別のマシン上で実行されていると、私は90〜100%のCPU負荷を得ます。残念ながら、このマシンは私のオフィスではなく、 "世界の反対側"にあります。このマシンがインディ9を使用しているのか、インディ10を使用しているのか、どうすればわかりますか?さらに、それがインディ10を実行している場合は、それが問題になる可能性がありますか、これはほとんどありませんか?Indy 9を使用するために私のプログラムで作成した場合、自分のサイトでIndy 10を使用できますか?
答えて
CPU負荷が高い原因を調べるには、AQTimeまたはSamplingProfilerのようなプロファイラを試してみてください。
これは、ほとんどの時間実行されているメソッドを取得します。そうすれば、問題の原因を突き止めることができます。
また、アプリケーションにログを追加することもできます。
決定的な答えは、あなたがインディ9を使用してプログラムをコンパイルした場合でも、パッケージを使用している場合、それを実行するINDY 9を使用しなければならないん
です。 AFAIK、INDY 9を使用して実行可能ファイルをコンパイルし、実行時にINDY 10を使用する方法はありません。偶然にもそれが起こることはありません。
接続の開始/終了などの一連の動作を実行するテストアプリケーションを準備することができます。続行する前に確認を求める(「Continue?y/n」)場合は、重要な操作を検出するたびにCPU負荷を確認できます。
お返事ありがとうございます。私はこれがインディの問題だとは思わない。私のQuad CPU PCでは、CPU負荷も1-2%からaproxに上昇します。 25%。これは、回線を開いたままにしておく(接続した)場合に発生します。ただし、ModBusクライアント側からのポーリングごとにModbusサーバを切断し、そのPCを再接続させると、CPU負荷は常に低くなります。何が普通ですか?常時回線を開いているか、またはすべてのポーリングのために接続と切断を行いますか?ポーリング頻度は、アイドルモード時:2000ms、アクティブモード時:500msです。
クワッドコアのCPUの25%=コアの1つの100% –
プラス:質問に使用されたアカウントでログインしていた場合は、自分の質問に回答を追加する代わりに、それともラベルを変更したのでしょうか?)いずれにしても、StackOverflowを使用すると、質問と回答の長いスレッドを避けるための編集が可能です。 –
あなたは何が起こっているかを確実に知るためにログを追加する必要があります。
これは問題の原因となっている接続そのものですか?それとも接続中に実行される作業ですか?
ログを絞り込むことで、プロセッサを節約できるようにコードを変更することができます。
また、AQTimeまたはSamplingProfilerを使用すると、先に示唆したように役立ちます。
私はいつもすべてのアプリケーションにデフォルトでロギングを追加していますが、その多くはオンにする必要がありますが、そこにはログが必要です。サイト上のソフトウェアが何を変更するかも知れず、単にログを有効にすると、多くの時間を節約できます。
展開された実行可能ファイルについてお話ししていますか?すべてが実行可能ファイルにコンパイルされていませんか? –
はい、ランタイムパッケージを使用していても、コンパイルされたものと同じIndyバージョンでなければなりません。 –