Próbowałem uzyskać całkowite wykorzystanie procesora komputera z systemem Windows (Windows 7 z systemem .NET 4.5) w języku C#. Wygląda na to, że użycie PerformanceCounter powinno być w stanie zaspokoić moje potrzeby.W jaki sposób można uzyskać licznik wydajności do pracy bez konieczności przebudowania przez użytkownika przy użyciu polecenia lodctr w wierszu polecenia?
pisałem jakiś kod próbny w oparciu off trzy linki poniżej (i sprawdzanie strony MSDN), był to najbardziej podstawowa wersja:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace EntropyProject
{
class Program
{
static void Main(string[] args)
{
PerformanceCounter cpuCounter;
cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
while(true)
{
try
{
float firstValue = cpuCounter.NextValue();
System.Threading.Thread.Sleep(500);
Console.WriteLine("Before getting processor:");
float currentCpuUsage = cpuCounter.NextValue();
Console.WriteLine("After getting processor:");
System.Threading.Thread.Sleep(1000);
Console.WriteLine(currentCpuUsage);
}
catch (Exception e)
{
Console.WriteLine("\n{0}\n", e.Message);
}
System.Threading.Thread.Sleep(10000);
}
}
}
}
Ilekroć nextValue nazywa się błąd wyjątku poniżej jest wyzwalany. Wydaje się, że jest to częsty problem z problemem z wartościami liczników wydajności.
Nie można załadować dane Counter nazwę, ponieważ nieprawidłowy wskaźnik „” został odczytany z rejestru
najbardziej zalecane solutions sugerujemy odbudować uszkodzone elementy używając lodctr podniesionym oknie polecenia jako administrator. Jednak chciałem użyć PerformanceCounters w programie, który zostałby udostępniony dużej liczbie osób, a więc byłoby niewłaściwe oczekiwać, że przebudują swoje PerformanceCounters za pomocą okna poleceń.
Pytania:
- Dlaczego ten błąd wyjątku występującymi?
- W jaki sposób prawidłowo korzystać z PerformanceCounter?
- Jak mogę uniknąć pobierania przez moje programy użytkowników okna cmd i odbudowywania liczników wydajności?
Źródła:
Similar Question about error when accessing counter name zadawane przez Annie Sheikh
możliwy duplikat [Nie można załadować danych nazwy licznika, ponieważ nieprawidłowy indeks - wyjątek] (http://stackoverflow.com/questions/17980178/cannot-load-counter-name-data-because-an-invalid-index-exception) – DonBoitnott
@DonBoitnott Hi Don, istota pytania jest podobny, chciałem jednak użyć PerformanceCounter wewnątrz programu, aby był on używany przez użytkownika końcowego, który nie powinien wchodzić i zmieniać wartości HKEY z regedit lub wiersza poleceń. Edytuję pytanie, aby było bardziej zrozumiałe – Luke
To prawdopodobnie nie jest duplikat, ale jego część prawna wydaje się być poprawna. Musi czytać z 'LOCAL_MACHINE', notorycznie niedostępnej sekcji re. gistry. – DonBoitnott