1


0

パフォーマンスカウンターレジストリの検証

起動時にパフォーマンスカウンターを追加するC#アプリケーションがあります。 ただし、レジストリHKEY_LOCAL_MACHINE→ SOFTWARE→ Microsoft→ Windows NT→ CurrentVersion→ Perflibが破損している場合(欠落データまたは無効なデータ)、パフォーマンスカウンター(PerformanceCounterCategory.Exists(category))の存在を確認する操作は本当にかかります最終的に例外をスローするまでの長い時間(約30秒)(InvalidOperation:Categoryは存在しません)。

私の質問は、パフォーマンスカウンターを追加する前にレジストリの有効性を確認する方法(および有効性の意味)、または取得するのに30秒かかることがないようにperfカウンター操作をタイムアウトできる方法があるかどうかです例外。

3 Answer


1


「妥当性」は、あなたが知らない内部実装の詳細だと思います。 ただし、少なくとも同じレジストリキーを開いて、それらが存在するかどうかを確認することはできます。 Process Explorerを使用して、読み取り中のキーを把握できます。

しかし、なぜあなたも気にするのか疑問です。 破損したレジストリはあまり一般的ではありません。もしそうなら、どうしますか? できることは、やめるだけです。 したがって、例外をキャッチすることもできます。 これを他のブロック操作と同様に処理し、ワーカースレッド(UIスレッドではない)で実行し、ユーザーに進行状況を表示して、アプリがハングしていないことを知らせます。


0


レジストリが壊れていますか?

私のプログラムには、実行時にパフォーマンスカウンターを作成する権限がないことがわかりました。 代わりに、カウンターの作成をインストーラープログラムに追加しました。インストーラーは管理者として実行する必要があります。 実行時に、私のプログラムは、作成済みのカウンターへのアクセスまたは更新に問題がありませんでした。


0


質問に答える方法はわかりませんが、正しく理解できれば、問題は起動時にアプリケーションが最大30秒間ハングしたように見えることです。

その場合は、ワーカースレッドを作成し、パフォーマンスモニターを作成してからアプリケーションの起動を続行するように指示することで、それを回避できることをお勧めします。 +パフォーマンスカウンターを使用したことがないので、パフォーマンスカウンターを使用して、これが機能しなくなることはありませんか?