Delphi 7 でプログラムを作成しました (Indy を使用する ModBus コンポーネントが含まれています)。私のマシンでは Indy 9 を使用しており、正常に動作します。ModBus プロトコルを介して他のマシンと良好に通信します。ただし、プログラムを別のマシンで実行すると、CPU の負荷が 90 ~ 100% になります。残念ながら、このマシンは私のオフィスではなく、「地球の反対側」にあります。このマシンが Indy 9 または Indy 10 を使用しているかどうかを確認するにはどうすればよいですか? さらに、Indy 10 を実行している場合、それが問題になる可能性はありますか?
5 に答える
決定的な答えはノーです
プログラムを indy 9 でコンパイルすると、パッケージを使用していても、INDY 9 を使用して実行されます。私の知る限り、INDY 9 を使用して実行可能ファイルをコンパイルし、実行時に INDY 10 を使用する方法はありません。
CPU 負荷が高い原因を突き止めるには、AQTimeやSamplingProfilerなどのプロファイラーを試してみてください。
これにより、ほとんどの時間実行されているメソッドが取得されます。次に、問題の原因を突き止めることができます。
または、アプリケーションにログを追加することもできます。
根本原因を見つけるために、接続の開閉などの一連のアクションを実行するテスト アプリケーションを準備できます。続行する前にユーザーに確認を求める場合 ("Continue ? y/n")、ユーザーはすべてのステップの CPU 負荷をチェックして重要な操作を検出できます。
回答ありがとうございます。これは Indy の問題ではないと思います。私の Quad CPU PC では、CPU 負荷も 1 ~ 2% から約 1% に上昇します。25%。これは、回線を開いたまま (接続) にすると発生します。ただし、ModBus クライアント側からのポーリングのたびに ModBus サーバーを切断し、その PC を再接続させると、CPU 負荷は常に低くなります。正常とは何ですか?常に回線を開いたままにするか、ポーリングごとに接続および切断しますか? ポーリング頻度は次のとおりです。アイドル モードでは 2000 ミリ秒、アクティブ モードでは 500 ミリ秒です。
何が起こっているのかを確実に把握するために、ログを追加する必要があります。
問題を引き起こしているのは接続自体ですか?それとも接続中の作業ですか?
ログはこれを絞り込むのに役立ち、コードを変更してプロセッサーの負荷を軽減できる場合があります。
前に提案したように AQTime または SamplingProfiler を使用すると役立ちます。
個人的には、デフォルトで常にすべてのアプリケーションにログを追加します。多くのアプリケーションはオンにする必要がありますが、そこにあります。ソフトウェアがサイトに配置されると、何が変更されるかわかりません。ログをオンにするだけで時間を大幅に節約できます。