windows - Sådan får du den aktuelle CPU-brug som Task Manager - Vb.net

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg arbejder i et program, som det har brug for at få den nuværende CPU-anvendelse. Hvordan kan jeg opnå det i vb.Net
Jeg så et svar på dette websted
her er linket jeg kan ikke kopiere den kode, den vandt. Lad mig ikke,
Hvordan får man CPU-brug?


Men da jeg er ny til vb, ved jeg ikke, hvor jeg skal sætte den første sætning ('Import Namespace System.Diagnostics'), jeg ved, at jeg har brug for at indsætte Import før offentlig klasse form1, men jeg kan ikke importere der.


Tak på forhånd ,
Anes08

Bedste reference


Selvom det ikke er tilladt at svare på sådanne spørgsmål, men stadig er der noget der kan hjælpe dig med at komme i gang:


   Dim cpu as New System.Diagnostics.PerformanceCounter 
   cpu.CategoryName = "Processor"
   cpu.CounterName = "\% Processor Time"
   cpu.InstanceName = "\_Total"
   MessageBox(cpu.NextValue.ToString & "\%")


Hvis det ikke virker, er her en bedre version:


  Dim cpu as PerformanceCounter  '''Declare in class level

 'On form load(actually you need to initialize it first)

  cpu = new PerformanceCounter("Processor", "\% Processor Time",    "\_Total")

  '''Finally,get the value :

  MsgBox(cpu.NextValue & "\%") '''Use .ToString if required

Andre referencer 1


du kan bruge LblCpuUsage.text = CombinedAllCpuUsageOfEachThread.NextValue()
. Der er et hjælper bibliotek for at få den information:



  Performance Data Helper (se Brug af PDH-funktionerne til forbrug
  Counter Data (Windows) [[^]])



.


Microsoft eksempler er i C, men der er også tilsvarende VB (ikke. Net) funktioner:



  Performance Counters-funktioner til Visual Basic (Windows) [[^]]


Andre referencer 2


For mig ønskede jeg et gennemsnit. Der var et par problemer med at få CPU-udnyttelse, der syntes at der skulle være en nem pakke til at løse, men jeg så ikke en.


Den første er selvfølgelig, at en værdi på 0 på den første anmodning er ubrugelig. Da du allerede ved, at det første svar er 0, hvorfor tager funktionen ikke bare det i betragtning og returnerer den sande .NextValue ()?


Det andet problem er, at en øjeblikkelig aflæsning kan være vildt unøjagtig, når man forsøger at træffe beslutninger om, hvilke ressourcer din app muligvis har adgang til, da den kan spike eller mellem pigge.


Min løsning var at gøre en for loop, der cykler igennem og giver dig et gennemsnit for de sidste par sekunder. Du kan justere tælleren for at gøre den kortere eller længere (så længe den er mere end 2).


public static float ProcessorUtilization;

public static float GetAverageCPU()
{
    PerformanceCounter cpuCounter = new PerformanceCounter("Process", "\% Processor Time", Process.GetCurrentProcess().ProcessName);
    for (int i = 0; i < 11; ++i)
    {
        ProcessorUtilization += (cpuCounter.NextValue() / Environment.ProcessorCount);
    }
    // Remember the first value is 0, so we don't want to average that in.
    Console.Writeline(ProcessorUtilization / 10); 
    return ProcessorUtilization / 10;
}