0

SAEA ソケット コマンドを使用して IOC コンテナーの複数の接続を処理するネットワーク層を構築しました。このネットワーク層は、クライアントが関心のあるトピックをサーバーに通知するハートビートの形式を使用します。

私の問題は、ネットワーク層の上で実行されているプロセスの 1 つが CPU を占有することがあることです。これにより、ハートビートがタイムリーに呼び出されなくなり、サーバーはクライアントからのサブスクリプションを確認します。System.Threading.Timer を使用してハートビート送信を実行しています。

問題のプロセスは数学的計算であり、IO バウンドではないことが判明しました (私の同僚は DB からデータをプリロードしますが、奇跡的にネットワークを妨害しません)。彼は Parallel.For ループを使用して計算を行っており、ご覧のとおりです。ループにヒットすると、CPU 使用率が跳ね上がります。

私はいくつかのことを試しましたが、うまくいきませんでした:

  1. ループの MaxDegreeOfParallelism を単純に減らします。
  2. 次のように、優先度の低いスケジューラを追加します。 .aspx

ハートビートが消えることを確認するための他の戦略は何ですか? CPU を使い果たしている数学関数と比較すると、実際には大した作業ではありません。

4

0 に答える 0