0

古い「現在のプロセスの Windows パフォーマンス カウンターを取得する方法」の問題を回避しようとしています。基本的に、プロセス オブジェクト インスタンスを列挙してプロセス オブジェクトのリストを取得し、それらのプロセス ID をクエリして自分のプロセス ID と比較します。

これに基づいて、正しいインスタンス インデックスを使用してパフォーマンス カウンター パスを作成し (に似たものを作成する\Process(my_program#3)\<counter>)、それを使用して、関心のあるカウンターを照会できます。PdhAddCounter呼び出しの前に my_program が終了しますか? 私の理解が正しければ、カウンター パスが別のプロセスを参照しているか、無効になっていることを意味します。プロセスIDのクエリ中に消えることさえあります...

カウンター パスを使用してカウンター ハンドルを取得する前に、カウンター パスが無効になるのを防ぐにはどうすればよいですか?

4

1 に答える 1

0

うわー、あなたは正しいです。これは私にとって大きな設計上の欠陥のようです。名前が一意でない場合、インスタンスを確実に監視することは基本的に不可能です。Process オブジェクトと Thread オブジェクト専用の回避策を偶然見つけましたが、これはグローバル設定であり、他のアプリケーションに影響を与える可能性があります。

これを行う最も安全な方法は、すべてのプロセス オブジェクトを監視し、データを収集するたびに目的のプロセス ID を持つオブジェクトを見つけることだと思います。

于 2011-09-28T16:09:27.610 に答える