/ / Brak liczników wydajności - c #, windows, performanceancecounter

Liczniki wydajności zniknęły - c #, okna, performancecounter

Mój problem polega na tym, że niektóre kategorie liczników wydajności wydają się czasem gubić i nie rozumiem, dlaczego.

Poniższy kod zgłosi wyjątek, taki jak ten:

Nie można wyszukać kategorii wydajności

Błąd Msg: Kategoria nie istnieje. CategoryName: Dysk fizyczny HP EVA
Lista kategorii grup docelowych:
ServiceModelService 4.0.
bla bla

Wydruk zawiera długą listę liczników wydajności, ale nie tę, której szukam. Jeśli zajrzę do perfmon.exe, mogę znaleźć brakującą kategorię raz.

Korzystam z następującego kodu, aby znaleźć różne liczniki w kategorii.

public static string[] GetPerformanceCategory(string CategoryName)
{
//Console.WriteLine("CategoryName to Search for: " + CategoryName);
if (string.IsNullOrEmpty(CategoryName))
throw new NullReferenceException("CategoryName is empty");

try
{
PerformanceCounterCategory perfCat = new PerformanceCounterCategory(CategoryName);

string[] catInstances = perfCat.GetInstanceNames();
return catInstances;
}
catch(Exception Ex)
{
StringBuilder ErrorMsg = new StringBuilder();
ErrorMsg.AppendLine("Failed to lookup Preformance Category");
ErrorMsg.AppendLine("Error Msg: " + Ex.Message);
ErrorMsg.AppendLine("CategoryName: " + CategoryName);
ErrorMsg.AppendLine("Category list on target:");

StringBuilder CatList = new StringBuilder();
var categories = PerformanceCounterCategory.GetCategories();
foreach (var Cat in categories)
CatList.AppendLine(Cat.CategoryName);

ErrorMsg.AppendLine(CatList.ToString());

Logger.WriteToLog(ErrorMsg.ToString(), EventLogEntryType.Error);
return null;
}
}

Pytanie sprowadza się do tego, czy jest jakaś „magia”, która może sprawić, że liczniki wydajności znikną? A może muszę zrobić coś konkretnego?

Odpowiedzi:

2 dla odpowiedzi № 1

Miałem dokładnie ten sam problem i tak go naprawiłem:

Architektura serwera (x86 lub x64) i.cel kompilacji net (c #) musi być taki sam, w przeciwnym razie kod nie będzie mógł uzyskać dostępu do wszystkich liczników wydajności (dostępny jest tylko podzbiór liczników wydajności, jeśli cel kompilacji i serwer różnią się).

Tak więc w Visual Studio kliknij projekt prawym przyciskiem myszy(w eksploratorze rozwiązań), wybierz „Właściwości”, a następnie przejdź do „Kompilacji” i wybierz x64 jako docelową platformę (jeśli twój serwer jest w wersji x64, w przeciwnym razie wybierz x86).


0 dla odpowiedzi nr 2

Mam również ten problem przy użyciu PerformanceCounterCategory.GetCategories (). Brakuje mojej kategorii na 1 komputerze. Inni nie mają problemów.

Perfmon może zobaczyć kategorię, typeperf w tym samym podniesionym wierszu polecenia może zobaczyć kategorię, ale nie poprzez kod .net.

Jedna uwaga. Problem dotyczy systemu Windows Server 2008 R2. Problem nie występuje w XP ani Windows 7.