Contadores de desempenho do Windows desaparecem do PerfMon

Estou completamente perplexo (TM) por este: Em um Win7SP1, máquina de 64 bits,PerfMon parece estar a recusar completamente o conhecimento dos contadores de desempenho personalizados instalados. Eu estou trabalhando com uma base de código existente que está instalando contadores perfeitamente bem em máquinas de produção, mas quando eu corro isto em minha máquina, quando eu corro isto com os contadores eu adicionei, ou se eu corro um conjunto completamente forjado (o carne de que é colada abaixo), eu recebo comportamento seriamente estranho.

É provavelmente mais fácil descrever usando o seguinte trecho de código:

<code>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) { /* ... */ }
}
</code>

A primeira vez que é executada, a categoria não existe e continua criando a categoria e o contador. Eu mato o processo, depois abroPerfMon. Neste ponto, eu possoAdd Counter, veja a categoria e o contador, adicione-o perfeitamente e assista0.000. Perfeito. Neste ponto, se eu fecharPerfMon e reabri-lo? Eu posso ver todos os contadores de desempenho do sistema muito bem, mas todos os meus personalizados - como mencionado acima, os que trabalham em produções, os que eu criei com base nesses,e os inventados - acabaram-se.

O interessante é que, se eu executar o código acima, ele sempre me dirá que o grupo existe. Mergulhando mais fundo, o contador até existe. Isso parece estranho para mim. Deixá-lo ainda no estado desaparecido, e tomando uma sugestão deAqui, Eu posso correr:lodctr /R, e elesFaz volte.

Então parece que de alguma forma estou corrompendo minha própria loja de contador de desempenho. Minha pergunta tem duas partes:

É isso que estou fazendo (corrompendo a loja de contadores de desempenho)?Já que é reproduzível, existe alguma coisa que se destaque no código ou no meu processo que estou fazendo para criar esse comportamento?

Na minha opinião, isso é um pouco diferente de outros questionários de "desempenho perdido", porque eles existem e eu os vejo desaparecer.

questionAnswers(2)

yourAnswerToTheQuestion