0

個々のマシンでホストされるサービスで構成されるリモート監視アプリケーションのプロジェクトを作成しています。このサービスの役割は、WMIを使用してCPU使用率、メモリ使用率などに関する情報を収集することです。このサービスは、スレッドを使用して15秒ごとにスキャンを実行します。ここで、各マシンのサービスをまったく同時に実行する必要があります。たとえば。8.15、8.30、8.45。現在の秒数をチェックし、システムがx.15、x.30、x.45などのいずれかに正確に一致する時間に達するまでスレッドをスリープさせる簡単なlogixを作成しました。ただし、これを実装するだけでは保証されません。同じプロセスでWMIを介してサービスによって収集される値は同時になります。たとえば。実行時に比較できるように、マシン1のCPU使用率とマシン2のCPU使用率を同時に収集する必要があります。

どんな助けでもいただければ幸いです。

4

2 に答える 2

0

「まったく同じ時間」に対する許容度はどのくらいですか? 1秒以内?10ミリ秒?

システムが同じ LAN 上にあり、ネットワークの遅延が小さい場合は、ZeroMQを使用して TCP/IP パブリッシュ/サブスクライブ システムをセットアップし、15 秒ごとにパルスを発生させて、すべてのシステムがスナップショットを取得するようにすることができます。

システムが広く分散している場合は、次のようなものを使用して NTP サーバーにクエリを実行できます: How to Query an NTP Server using C#?

于 2013-03-18T21:45:11.257 に答える
0

助けてくれてありがとう、実際に私はこれを機能させました。ここで適用されるロジック (妻の提案)。私は1つの静的コレクションを持っており、WMIクエリを使用してマシンから異なる値のセットを取得するそれぞれが実行されている2〜3の異なるスレッドがあります。現在、このデータの収集は 1 秒ごとに (現時点で) 行われ、静的コレクションに挿入されます。現在、秒が 15 の倍数である時間に挿入されたコレクションからレコードを取得する別のスレッドがあります。second % 15 = 0.これで問題は解決しました。コレクションからレコードを収集した後、現在の時間より前に収集されたすべてのレコードをコレクションから削除します。これが最善の解決策かどうかはわかりませんが、私にとってはうまくいきます。

于 2013-03-21T07:00:06.617 に答える