2

私はこれによって完全に困惑しています(TM):Win7SP1では、64ビットマシンは、PerfMonインストールされたカスタムパフォーマンスカウンターの知識を完全に否定しているように見えます。実稼働マシンにカウンターを完全にインストールしている既存のコードベースを使用していますが、自分のマシンで実行する場合、追加したカウンターを使用して実行する場合、または完全に工夫されたアセンブリを実行する場合(下に肉を貼り付けます)、ひどく変な振る舞いをします。

次のコードスニペットを使用して説明するのがおそらく最も簡単です。

var category = "SuperTest";
var counterName = "Test Counter 1";
var shouldInstall = true;

if (PerformanceCounterCategory.Exists(category))
{
    shouldInstall = false;
    Console.WriteLine("{0} Category Exists. Overwrite? [n]", category);
    var input = Console.ReadLine();
    if (bool.TryParse(input, out shouldInstall))
    {
        PerformanceCounterCategory.Delete(category);
    }
}
if (shouldInstall)
{
    var col = new CounterCreationDataCollection();
    col.Add(new CounterCreationData()
    {
        CounterName = counterName,
        CounterType = PerformanceCounterType.NumberOfItems64
    });

    PerformanceCounterCategory.Create(category, "Test category.", PerformanceCounterCategoryType.SingleInstance, col);
    // Magical voodoo line that may indicate my inexperience, but whose inclusion or
    // exclusion does not affect discernibly affect behavior.
    PerformanceCounter.CloseSharedResources();
}

// Multithreading setup, each thread repeats block below infinitely:
{
    System.Threading.Thread.Sleep((new Random()).Next(100));
    try
    {
        var counter = new PerformanceCounter(category, counterName, false));
        c.Increment();
    }
    catch (Exception ex) { /* ... */ }
}

初めて実行するときは、カテゴリは存在せず、カテゴリとカウンターの作成が続行されます。プロセスを強制終了してから、を開きPerfMonます。この時点でAdd Counter、カテゴリとカウンターを確認し、完全にうまく追加して、に座っているのを見ることができ0.000ます。完全。この時点で、閉じPerfMonてから再度開くとどうなりますか?すべてのシステムパフォーマンスカウンターは問題なく表示されますが、前述のように、本番環境で機能するもの、それらに基づいて作成したもの、および考案されたものはすべてなくなっています。

興味深いのは、上記のコードを実行すると、グループが存在することを一貫して教えてくれることです。深く潜ると、カウンターも存在します。これは私には奇妙に思えます。それを消えた状態のままにして、ここから手がかりをとって、私は走ることができます:lodctr /R、そして彼ら戻ってきます。

だから、どういうわけか私は自分のパフォーマンスカウンターストアを壊しているようです。私の質問には2つの部分があります。

  1. これは私がしていることですか(パフォーマンスカウンターストアを破壊しています)?
  2. 再現性があるので、この動作を作成するために行っているコードまたはプロセスで目立つものはありますか?

私の考えでは、これは他の「パフォーマンスカウンターがなくなった」という質問とは多少異なります。なぜなら、それらは存在し、消えていくのを見ているからです。

4

2 に答える 2

2

問題は、投稿したコードではなく、コンピューターおよび/またはその構成にある可能性があります。私は同じ状況に遭遇しましたが、パフォーマンス モニターを開いたときにカウンターが消える理由を見つけられませんでした。ただし、これについてはお手伝いできます。

  • Perfmon は、レジストリで無効としてフラグを立てることにより、パフォーマンス カウンターを無効にすることがあります。リンクは、カウンターが無効になっている理由を見つけるのに役立つ場合があります。

  • カウンターの監視は、ツールtypeperfを使用して行うこともできます。私の経験では、typeperf は perfmon が無効にするのと同じカウンターを無効にしておらず、カウンターを監視する代替手段を提供しています。

于 2012-08-03T18:06:26.997 に答える