要获取ASP.NET Core应用程序的CPU峰值和等待时间,可以使用以下代码示例:
using System;
using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
public class Program
{
public static async Task Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
// 启动性能计数器
var process = Process.GetCurrentProcess();
var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
var waitCounter = new PerformanceCounter("Processor", "% Idle Time", "_Total");
// 启动计时器
var stopwatch = Stopwatch.StartNew();
try
{
// 启动ASP.NET Core应用程序
await host.RunAsync();
}
finally
{
// 停止计时器
stopwatch.Stop();
// 停止性能计数器
cpuCounter.Close();
cpuCounter.Dispose();
waitCounter.Close();
waitCounter.Dispose();
// 输出CPU峰值和等待时间
var cpuPeak = cpuCounter.NextValue() / Environment.ProcessorCount;
var cpuWait = waitCounter.NextValue() / Environment.ProcessorCount;
Console.WriteLine($"CPU Peak: {cpuPeak}%");
Console.WriteLine($"CPU Wait: {cpuWait}%");
Console.WriteLine($"Elapsed Time: {stopwatch.Elapsed.TotalSeconds} seconds");
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup();
});
}
在上述代码中,我们使用了PerformanceCounter
类来获取CPU的峰值和等待时间。我们在应用程序开始时启动计数器,并在应用程序结束时停止计数器。然后,我们使用NextValue
方法获取当前的CPU使用率,并除以处理器数量来获取每个处理器的平均使用率。最后,我们使用Stopwatch
类来计算应用程序的运行时间。
请注意,上述代码示例是在应用程序的Main
方法中实现的。根据你的需求,你可以将这些代码放置在适当的位置,以便在应用程序的特定阶段或事件中获取CPU峰值和等待时间。