gpt4 book ai didi

c# - 获取 CPU 和 RAM 使用情况

转载 作者:可可西里 更新时间:2023-11-01 08:21:16 27 4
gpt4 key购买 nike

我需要在进程执行期间获取 ram 内存和 CPU 使用率(该进程有时会运行 30 分钟以上)。我能够获得空闲 RAM,但与任务管理器中的值相比,CPU 使用率不正确。难道我做错了什么?这是我的代码:

class Program
{
static List<float> AvailableCPU = new List<float>();
static List<float> AvailableRAM = new List<float>();

protected static PerformanceCounter cpuCounter;
protected static PerformanceCounter ramCounter;
static void Main(string[] args)
{
cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";

ramCounter = new PerformanceCounter("Memory", "Available MBytes");

try
{
System.Timers.Timer t = new System.Timers.Timer(1200);
t.Elapsed += new ElapsedEventHandler(TimerElapsed);
t.Start();
Thread.Sleep(10000);
}
catch (Exception e)
{
Console.WriteLine("catched exception");
}
Console.ReadLine();

}

public static void TimerElapsed(object source, ElapsedEventArgs e)
{
float cpu = cpuCounter.NextValue();
float ram = ramCounter.NextValue();
Console.WriteLine(string.Format("CPU Value: {0}, ram value: {1}", cpu, ram));
AvailableCPU.Add(cpu);
AvailableRAM.Add(ram);
}

}

但是,当我运行该程序时,与任务管理器中的值相比,这是它打印到控制台的内容: cpu usage

我做错了什么?

最佳答案

你的值(value)观没有错。

您看到任务管理器返回的差异的原因是“CPU 使用率”值是针对给定时间间隔计算的值,即在两次 NextValue() 调用之间.如果任务管理器“不调用它自己的 NextValue”(如果我们简化它的工作方式),那么您将不会返回相同的结果。

想象一下以下场景:

Time 0: 0% actual CPU usage
Time 1: 50% actual CPU usage
Time 2: 70% actual CPU usage
Time 3: 2% actual CPU usage
Time 4: 100% actual CPU usage
  • 如果您检查时间 1 和时间 3 之间的值,您将返回基于“50% 和 2%”的值。
  • 如果任务管理器检查时间 2 和时间 4 之间的值,它会返回不同的值,即基于“70% 和 100%”的值。

您可以尝试为您自己的应用程序生成多个进程,您应该也会看到不同的结果。

关于c# - 获取 CPU 和 RAM 使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33387425/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com