Ho cercato di ottenere l'utilizzo totale della CPU di Windows PC (Windows 7 con .Net 4.5) in C#. Sembra che l'utilizzo di PerformanceCounter dovrebbe essere in grado di soddisfare le mie esigenze.Come posso far funzionare il contatore delle prestazioni senza che l'utente debba ricostruire con lodctr in un prompt dei comandi?
ho scritto un codice di prova in base al largo i tre link qui sotto (e controllando le pagine MSDN), questa è stata la più semplice versione:
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);
}
}
}
}
Ogni volta NextValue è chiamato l'errore di eccezione di seguito viene attivato. Questo sembra essere un problema comune con un problema con i valori del contatore delle prestazioni.
Impossibile caricare i dati nome del contatore, perché un indice non valido '' è stato letto dal Registro di sistema
Il più consigliato solutions suggeriscono che si ricostruisce gli elementi danneggiati utilizzando lodctr in una finestra di comando rialzata come amministratore. Tuttavia volevo usare PerformanceCounters in un programma che sarebbe stato rilasciato a un gran numero di persone e quindi sarebbe inappropriato aspettarsi che ricostruiscano i propri PerformanceCounters usando la finestra dei comandi.
Domande:
- Perché questo errore di eccezione che si verificano?
- Come si utilizza correttamente PerformanceCounter altrimenti?
- Come posso evitare che gli utenti dei miei programmi debbano aprire una finestra cmd e ricostruire i loro contatori delle prestazioni?
Fonti:
Similar Question about error when accessing counter name poste dai Annie Sheikh
possibile duplicato di [Impossibile caricare i dati del nome contatore perché un indice non valido -Exception] (http://stackoverflow.com/questions/17980178/cannot-load-counter-name-data-because-an-invalid-index-exception) – DonBoitnott
@DonBoitnott Ciao Don, l'essenza della domanda è simile, ma volevo usare PerformanceCounter all'interno di un programma per essere utilizzato da un utente finale che non dovrebbe aver bisogno di entrare e modificare i valori di HKEY da regedit o da un prompt dei comandi.Vado a modificare la domanda per renderla più chiara – Luke
Probabilmente non è un duplicato, ma la parte delle autorizzazioni sembra valida. Deve leggere da 'LOCAL_MACHINE', una sezione notoriamente off-limits del re gistry. – DonBoitnott