Как добавить новый счетчик в существующую категорию счетчиков производительности, не удаляя старые счетчики? - PullRequest
13 голосов
/ 20 июля 2010

У меня есть пользовательская категория счетчиков, к которой мне нужно добавить новый счетчик, не удаляя и не сбрасывая существующие счетчики. Как я могу это сделать?

Я пытался использовать CounterExists (), но даже после создания счетчика, как я могу связать его с элементом CounterCreationDataCollection и связать с моей существующей категорией счетчиков?

1 Ответ

13 голосов
/ 20 января 2011

Лучший способ сделать это, как я обнаружил, тем более что по этой теме, похоже, не так много информации, - это сохранить существующие необработанные значения и затем повторно применить их после удаления и повторного создания категории.

/// <summary>
/// When deleting the Category, need to preserve the existing counter values
/// </summary>
static Dictionary<string, long> GetPreservedValues(string category, XmlNodeList nodes)
{
    Dictionary<string, long> preservedValues = new Dictionary<string, long>();

    foreach (XmlNode counterNode in nodes)
    {
        string counterName = counterNode.Attributes["name"].Value;

        if (PerformanceCounterCategory.CounterExists(counterName, category))
        {
            PerformanceCounter performanceCounter = new PerformanceCounter(category, counterName, false);
            preservedValues.Add(counterName, performanceCounter.RawValue);

            Console.WriteLine("Preserving {0} with a RawValue of {1}", counterName, performanceCounter.RawValue);
        }
        else
        {
            Console.WriteLine("Unable to preserve {0} because it doesn't exist", counterName);
        }
    }

    return preservedValues;
}

/// <summary>
/// Restore preserved values after the category has been re-created
/// </summary>
static void SetPreservedValues(string category, Dictionary<string, long> preservedValues)
{
    foreach (KeyValuePair<string, long> preservedValue in preservedValues)
    {
        PerformanceCounter performanceCounter = new PerformanceCounter(category, preservedValue.Key, false);
        performanceCounter.RawValue = preservedValue.Value;

        Console.WriteLine("Restoring {0} with a RawValue of {1}", preservedValue.Key, performanceCounter.RawValue);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...