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 № 1Miał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.