这篇文章我们分享一种如何在 .NETCore 中获取 CPU使用率的方法, 它所报告的这个值和 任务管理器 中报告的 CPU 使用值 差不多是一致的。

.NET Framework 中,很多人会用 PerformanceCounter 类做这件事情,参考如下代码:

public class Program
        public static void Main(string[] args)
            while (true)
                var cpuUsage = GetCpuUsageForProcess();
                Console.WriteLine(cpuUsage);
        private static int GetCpuUsageForProcess()
            var currentProcessName = Process.GetCurrentProcess().ProcessName;
            var cpuCounter = new PerformanceCounter("Process", "% Processor Time", currentProcessName);
            cpuCounter.NextValue();
            return (int)cpuCounter.NextValue();
 

PerformanceCounter 在 .NETCore 中是没有的,所以只能采用其他方式了,其实在 System.Diagnostics.Process 类中有一个 TotalProcessorTime 属性,它可以准实时的统计当前进程所消耗的CPU处理器时间,参考如下代码:

class Program
        public static async Task Main(string[] args)
            var task = Task.Run(() => ConsumeCPU(50));
            while (true)
                await Task.Delay(2000);
                var cpuUsage = await GetCpuUsageForProcess();
                Console.WriteLine(cpuUsage);
        public static void ConsumeCPU(int percentage)
            Stopwatch watch = new Stopwatch();
            watch.Start();
            while (true)
                if (watch.ElapsedMilliseconds > percentage)
                    Thread.Sleep(100 - percentage);
                    watch.Reset();
                    watch.Start();
        private static async Task<double> GetCpuUsageForProcess()
            var startTime = DateTime.UtcNow;
            var startCpuUsage = Process.GetCurrentProcess().TotalProcessorTime;
            await Task.Delay(500);
            var endTime = DateTime.UtcNow;
            var endCpuUsage = Process.GetCurrentProcess().TotalProcessorTime;
            var cpuUsedMs = (endCpuUsage - startCpuUsage).TotalMilliseconds;
            var totalMsPassed = (endTime - startTime).TotalMilliseconds;
            var cpuUsageTotal = cpuUsedMs / (Environment.ProcessorCount * totalMsPassed);
            return cpuUsageTotal * 100;
 

可以看到程序每2s输出一次,观察到 output 和 任务管理器 中的CPU利用率基本是一致的。

译文链接:https://medium.com/@jackwild/getting-cpu-usage-in-net-core-7ef825831b8b

这篇文章我们分享一种如何在 .NETCore 中获取 CPU使用率的方法, 它所报告的这个值和 任务管理器 中报告的 CPU 使用值 差不多是一致的。在 .NET Framework 中,...
分别通过PerformanceCount、ManagementClass、OpenHardwareMonitor、kernel32 来综合获取下面信息: 内存使用率、总CPU百分比、获得物理总内存(、获得可用内存(G)、获取mac地址、获取分区信息使用空间 进程(XX)CPU百分比、进程(XX)占用的内存大小、进程(XX)占用的内存百分比。 PerformanceCount方面比较详细,可以分别获取 计数器的类别、类别下的实例名和计数器名、通过活动的输入获取对应的状态值
代码比较简单直接上了,官网的示例在这个链接里 https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-perfrawdata using System; using System.Collections.Generic; using System.Linq; using System.Management; using ...
废话不多说了,网上存在一种获取CPU使用率的方法是有bug的。也不知道有多少使用该方法的人没注意这个问题了,反正我是看到有人直接复制了这个代码。 来看一下 FILETIME的结构: typedef struct _FILETIME {     DWORD dwLowDateTime;     DWORD dwHighDateTime; } FILETIME, *PFILETIME,
Prometheus-net.DotNetMetrics 软件包的插件,它公开了.NET核心运行时指标,其包括: 垃圾回收的收集频率和时间(按生成/类型,暂停时间和GC CPU消耗率) 大小对象堆分配的字节 JIT编译和JIT CPU消耗率 线程池大小,调度延迟以及增长/缩小的原因 抛出异常,按类型细分 这些指标对于理解任何非平凡应用程序的性能至关重要。 即使您的应用程序配置良好,您也只能得到一半的故事-运行时所做的事情可以使情况更完整。 支持.NET core v2.2 +,但建议使用.NET core v3.0 + 。 可能会影响度量标准收集或运行时稳定性。
公司的产品一直紧跟 .net core 3.0 preview 不断升级, 部署到 Linux 服务器后, 偶尔会出现某个进程CPU占用100%.   由于服务部署在云上, 不能使用远程调试; 在局域网内的Linux 服务器 或 Windows开发机上又不能重现这个问题, 联想到Java的jstack, 很是羡慕啊. 想到.net core 已经出来这么久了, 还是试着找找看吧, 结果还真找到一篇博客Introducing diagnostics improvements in .NET Core 3.0   这篇文章介绍了3个工具 •dotnet-counters: 实时统计runtime的
邮件恶魔& Mail Demon是一个简单轻巧的C#smtp服务器和邮件列表系统,用于发送无限制的电子邮件和文本消息。 通过专注于简单性,异步性和性能,即使在廉价Linux VPS上,您也可以轻松地每秒发送数千条消息。 内存使用率CPU使用率已优化到最大。 使用SPF验证还内置了安全性和垃圾邮件防护功能。 Mail Demon需要安装.NET 5.0+运行时,或者您可以构建独立的可执行文件来消除这种依赖性。 尝试使用之前,请确保将appsettings.json设置为所需的参数。 感谢和的强大代码库。 Mail Demon非常适合发送通知,公告甚至短信。 有关的更多信息,请参见。 IPBan集成 Mail Demon与集成在一起。 如果您在Linux或Windows机器上安装了IPBan,则Mail Demon将通过自定义日志文件将SMTP失败的登录尝试或邮件列表登录尝试发送到
.NET Core / .NET StandardBERT模型预测的示例。 通过运行getDependicies.sh下载预训练的BERT ONNX模型。 或将下载到BERT.WebApi/Model文件夹。 GPU使用率 该项目被设置为在CPU上运行。 这使示例可以在没有Nvidia GPU的机器上运行。 要在Nvidia CUDA GPU上运行: 在OnnxModelConfigurator.cs设置hasGpu = true 删除NuGet Microsoft.ML.OnnxRuntime.NoOpenMP 添加NuGet Microsoft.ML.OnnxRuntime.Gpu 解决方案运行时,它将在localhost:5001处启动ASP.NET Web服务。 一个插件,用于计算.NET应用程序资源的使用情况,包括:CPU使用率,GC,线程状态,通过Web请求获取状态信息的支持(可以自定义访问路径和身份验证),并且数据将以JSON格式返回。 支持.NET Framework> = 4.5 支持.NET Core> = 2.0 可以通过NuGet网站获得CLRStats,您可以使用以下命令进行安装: PM> Install-Package CLRStats 仓库的样本文件夹包含ASP.NET MVC和ASP.NET Core的样本。 ASP.NET MVC 该项目需要创建一个新的OWIN启动文件,其配置如下: public class Startup public void Configuration ( IAppBuilder app ) app . UseCLRStatsDashboard