You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让C#程序在Windows 10控制台显示自身占用的资源?

嘿,作为C#新手就想着监控自己程序的资源占用,这个思路超实用!在Windows 10上,咱们完全可以用.NET自带的类库实现,不需要额外安装任何包,下面一步步给你讲清楚:

核心原理

咱们要用到System.Diagnostics命名空间下的Process类——它能直接获取当前运行程序(也就是自身进程)的所有资源使用数据,非常方便。

完整代码示例

直接上可运行的代码,每一行都加了注释,你复制到Visual Studio或者Rider里就能跑:

using System;
using System.Diagnostics;
using System.Threading;

namespace ResourceMonitor
{
    class Program
    {
        static void Main(string[] args)
        {
            // 获取当前程序的进程实例,用using自动释放资源
            using (Process currentProcess = Process.GetCurrentProcess())
            {
                // 记录上一次的CPU总耗时,用来计算实时使用率
                TimeSpan previousCpuTime = currentProcess.TotalProcessorTime;
                DateTime previousTime = DateTime.Now;

                Console.WriteLine("=== 当前程序资源占用监控 ===");
                Console.WriteLine("按任意键停止监控...\n");

                // 循环刷新数据,直到用户按键
                while (!Console.KeyAvailable)
                {
                    // 等待1秒,避免刷新太快看不清
                    Thread.Sleep(1000);

                    // 必须调用Refresh方法,才能获取最新的进程数据
                    currentProcess.Refresh();

                    // 计算CPU使用率:通过两次采样的耗时差值,结合时间差和CPU核心数得出
                    TimeSpan currentCpuTime = currentProcess.TotalProcessorTime;
                    DateTime currentTime = DateTime.Now;
                    double cpuUsage = (currentCpuTime - previousCpuTime).TotalMilliseconds / 
                                      (currentTime - previousTime).TotalMilliseconds / 
                                      Environment.ProcessorCount * 100;

                    // 把字节转换成MB,方便阅读
                    double physicalMemoryMB = currentProcess.WorkingSet64 / (1024 * 1024);
                    double privateMemoryMB = currentProcess.PrivateMemorySize64 / (1024 * 1024);

                    // 清屏并打印最新数据
                    Console.Clear();
                    Console.WriteLine("=== 当前程序资源占用监控 ===");
                    Console.WriteLine("按任意键停止监控...\n");
                    Console.WriteLine($"CPU使用率: {cpuUsage:F1}%");
                    Console.WriteLine($"物理内存占用: {physicalMemoryMB:F1} MB");
                    Console.WriteLine($"私有内存占用: {privateMemoryMB:F1} MB");
                    Console.WriteLine($"当前线程数: {currentProcess.Threads.Count}");
                    Console.WriteLine($"当前句柄数: {currentProcess.HandleCount}");

                    // 更新上次的时间和CPU耗时,用于下一次计算
                    previousCpuTime = currentCpuTime;
                    previousTime = currentTime;
                }
            }
        }
    }
}
关键参数说明

给你解释下代码里用到的几个核心资源指标:

  • CPU使用率:这里通过计算两次采样的CPU耗时差值来得到实时使用率,比直接读属性更准确(因为直接读的是进程启动以来的总耗时)
  • 物理内存(WorkingSet64):程序当前实际占用的物理内存(和任务管理器里的"内存"列对应)
  • 私有内存(PrivateMemorySize64):程序独占的内存,不包括和其他进程共享的部分
  • 线程数/句柄数:分别是当前程序运行的线程数量和打开的系统句柄数量,这些都是排查程序性能问题的常用指标
小提示
  1. 如果你不想清屏刷新,可以把Console.Clear()去掉,让数据逐行打印
  2. 要是想监控其他资源(比如IO读写、页面错误),可以看看Process类的其他属性,比如IOReadBytes、IOWriteBytes,用法和上面的参数类似
  3. 运行程序的时候不需要特殊权限,因为咱们只是读取自身进程的信息,系统默认允许

内容的提问来源于stack exchange,提问作者RedstoneUmbreon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:12:02