导读:本期聚焦于小伙伴创作的《C#怎么获取电脑的开机运行时长_C#如何读取系统启动时间》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#怎么获取电脑的开机运行时长_C#如何读取系统启动时间》有用,将其分享出去将是对创作者最好的鼓励。

在C#开发里,获取电脑开机运行时长或者系统启动时间是比较常见的需求,不同的实现方式有着不同的特点和适用场景,下面会逐一介绍具体的实现方案。

C#怎么获取电脑的开机运行时长_C#如何读取系统启动时间

方案一:使用PerformanceCounter获取系统启动时间

Windows系统提供了性能计数器功能,其中System类别下的System Up Time计数器可以直接返回系统启动后经过的秒数,这种方式获取的数据比较准确,兼容性也不错。

实现步骤如下:

  • 引入System.Diagnostics命名空间
  • 创建PerformanceCounter实例,指定类别名、计数器名
  • 读取计数器的值并转换为需要的格式

完整代码如下:

using System;
using System.Diagnostics;

namespace GetSystemStartupTime
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // 创建性能计数器实例,类别为System,计数器为System Up Time
                PerformanceCounter pc = new PerformanceCounter("System", "System Up Time");
                // 首次调用NextValue()返回0,需要调用第二次获取实际值
                pc.NextValue();
                float upTimeSeconds = pc.NextValue();
                // 转换为时分秒格式
                TimeSpan upTime = TimeSpan.FromSeconds(upTimeSeconds);
                Console.WriteLine("系统启动时间(性能计数器方式):");
                Console.WriteLine($"开机运行时长:{upTime.Days}天 {upTime.Hours}小时 {upTime.Minutes}分钟 {upTime.Seconds}秒");
                // 计算系统启动的具体时间
                DateTime startupTime = DateTime.Now.Subtract(upTime);
                Console.WriteLine($"系统启动时间:{startupTime:yyyy-MM-dd HH:mm:ss}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"获取失败:{ex.Message}");
            }
        }
    }
}

方案二:使用Environment.TickCount获取开机运行时长

Environment.TickCount属性返回系统启动后经过的毫秒数,这个值是从系统启动开始计算的,但是需要注意该值是32位有符号整数,大约24.9天会溢出重置,所以更适合短时间内的运行时长获取。

实现逻辑很简单,直接读取该属性值,然后转换为时分秒格式即可,完整代码如下:

using System;

namespace GetSystemStartupTime
{
    class Program
    {
        static void Main(string[] args)
        {
            // 获取系统启动后的毫秒数
            int tickCount = Environment.TickCount;
            // 转换为TimeSpan
            TimeSpan upTime = TimeSpan.FromMilliseconds(tickCount);
            Console.WriteLine("系统启动时间(TickCount方式):");
            Console.WriteLine($"开机运行时长:{upTime.Days}天 {upTime.Hours}小时 {upTime.Minutes}分钟 {upTime.Seconds}秒");
            // 计算系统启动的具体时间
            DateTime startupTime = DateTime.Now.Subtract(upTime);
            Console.WriteLine($"系统启动时间:{startupTime:yyyy-MM-dd HH:mm:ss}");
        }
    }
}

两种方案对比

我们可以通过表格对比两种方案的特点,方便开发者根据实际场景选择:

方案优点缺点适用场景
PerformanceCounter方式数据准确,无溢出问题,支持长时间运行需要引入Diagnostics命名空间,部分精简系统可能缺少对应计数器需要长期监控系统运行时长,对准确性要求高的场景
Environment.TickCount方式实现简单,无需额外依赖,性能消耗低32位整数约24.9天溢出,精度为毫秒级短时间内的运行时长获取,轻量级工具开发

注意事项

  • 使用PerformanceCounter时,首次调用NextValue()方法会返回0,需要调用第二次才能获取到实际值,这是性能计数器的特性导致的。
  • 如果系统运行时间超过24.9天,使用Environment.TickCount会出现数值溢出,此时可以改用Environment.TickCount64属性,它是64位整数,不会出现溢出问题,代码只需要把int tickCount = Environment.TickCount;改为long tickCount = Environment.TickCount64;即可。
  • 计算系统启动时间时,使用的是当前时间减去运行时长,所以如果当前系统时间被修改过,计算出的启动时间也会不准确,这是两种方案都存在的局限性。

C#系统启动时间开机运行时长PerformanceCounterEnvironment_TickCount修改时间:2026-07-24 04:24:12

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。