Liczniki wydajności systemu Windows znikają z PerfMon

Jestem kompletnie zaskoczony (TM) przez to: Na 64-bitowej maszynie Win7SP1,PerfMon wydaje się całkowicie zaprzeczać znajomości zainstalowanych niestandardowych liczników wydajności. Pracuję z istniejącą bazą kodu, która instaluje liczniki doskonale na komputerach produkcyjnych, ale kiedy uruchamiam je na moim komputerze, kiedy uruchamiam je z dodanymi licznikami, lub gdy uruchamiam całkowicie wymyślony zespół ( mięso, które jest wklejone poniżej), mam bardzo dziwne zachowanie.

Prawdopodobnie najłatwiej jest opisać, używając następującego fragmentu kodu:

<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>

Przy pierwszym uruchomieniu kategoria nie istnieje i tworzy kategorię i licznik. Zabijam proces, a następnie otwórzPerfMon. W tym momencie mogęAdd Counter, zobacz kategorię i licznik, dodaj go idealnie i obserwuj, jak siedzi0.000. Idealny. W tym momencie, jeśli zamknęPerfMon i ponownie go otworzyć? Widzę wszystkie liczniki wydajności systemu, ale wszystkie moje niestandardowe - jak wspomniano, te, które działają w produkcjach, te, które stworzyłem na podstawie tych,i wymyślone - po prostu zniknęły.

Ciekawe jest to, że jeśli uruchomię powyższy kod, będzie on konsekwentnie informował mnie, że grupa istnieje. Nurkując głębiej, licznik nawet istnieje. Wydaje mi się to dziwne. Pozostawienie go wciąż w stanie zniknięcia i odebranie wskazówkitutaj, Mogę biec:lodctr /R, i onirobić Wróć.

Wygląda na to, że w jakiś sposób niszczę swój własny sklep licznika wydajności. Moje pytanie składa się z dwóch części:

Czy to właśnie robię (uszkadzając sklep licznika wydajności)?Ponieważ jest to powtarzalne, czy jest coś, co wyróżnia kod lub mój proces, który robię, aby utworzyć to zachowanie?

Moim zdaniem jest to nieco odmienne od innych pytań o „liczniki wydajności”, ponieważ one istnieją i obserwuję ich znikanie.

questionAnswers(2)

yourAnswerToTheQuestion