如何解决win10开机内存和cpu占用过高

本文提供了解决Win10系统启动时内存和CPU占用过高的详细步骤,包括禁用特定服务、修改组策略及注册表设置,旨在帮助用户优化系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何解决win10开机内存和cpu占用过高

如何解决win10开机内存和cpu占用过高
工具/原料
演示电脑:联想刃7000
方法/步骤
1
按win+r键,打开运行窗口输入services.msc,然后点击确定。操作见下图。

如何解决win10开机内存和cpu占用过高
2
将服务Diagnostic Policy Service、Diagnostic Service Host、Diagnostic System Host设为禁用点击确定。操作见下图。

如何解决win10开机内存和cpu占用过高
3
将Superfetch服务设为禁用。操作见下图。

如何解决win10开机内存和cpu占用过高
4
按win+r键,打开运行窗口输入gpedit.msc点击确定,操作见下图。

如何解决win10开机内存和cpu占用过高
5
打开组策略窗口后在计算机配置-管理模板-Windows组件点击找到Windows Defender防病毒程序点击,在右侧点击关闭winddows defender防病毒程序在打开窗口选择已启用后点击确定,操作见下图。

如何解决win10开机内存和cpu占用过高
6
在计算机配置-管理模板-Windows组件-搜索在右侧列表点击允许搜索和Cortana使用位置将其设为已禁用,操作见下图。

如何解决win10开机内存和cpu占用过高
7
右键Update Orchestrator Service服务查看服务名,效果如下。

如何解决win10开机内存和cpu占用过高
8
在运行窗口输入regedit进入注册表将HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsoSvc项下的ImagePath设置为"%systemroot%\system32\noupdate.exe -k netsvcs -p",如下图所示

如何解决win10开机内存和cpu占用过高
9
进入组策略窗口,在计算机配置-管理模板-Windows组件-Windows更新将右侧的配置自动更新设为已禁用。操作如下图。

如何解决win10开机内存和cpu占用过高
END
总结
1、按win+r键,打开运行窗口输入services.msc,然后点击确定

2、将服务Diagnostic Policy Service、Diagnostic Service Host、Diagnostic System Host设为禁用点击确定

3、将Superfetch服务设为禁用

4、按win+r键,打开运行窗口输入gpedit.msc点击确定

5、打开组策略窗口后在计算机配置-管理模板-Windows组件点击找到Windows Defender防病毒程序点击,在右侧点击关闭winddows defender防病毒程序在打开窗口选择已启用后点击确定

6、在计算机配置-管理模板-Windows组件-搜索在右侧列表点击允许搜索和Cortana使用位置将其设为已禁用

7、右键Update Orchestrator Service服务查看服务名

8、在运行窗口输入regedit进入注册表将HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsoSvc项下的ImagePath设置为"%systemroot%\system32\noupdate.exe -k netsvcs -p"

9、进入组策略窗口,在计算机配置-管理模板-Windows组件-Windows更新将右侧的配置自动更新设为已禁用

如何解决win10开机内存和cpu占用过高
END
注意事项
tips:有些组策略操作需要升级win10专业版,升级专业版参照:https://jingyan.baidu.com/article/c843ea0b458fa937931e4aa5.html

<think>嗯,用户想要在Windows系统下使用Qt获取CPU使用率、内存占用、启动时间磁盘容量。首先,我需要回忆一下Qt中相关的类方法,以及Windows API的知识。 首先,CPU使用率。在Windows中,可以使用PDH(性能数据助手)库来获取性能计数器数据,比如处理器使用率。或者使用WMI(Windows Management Instrumentation),但可能比较复杂。Qt本身没有直接获取CPU使用率的函数,所以可能需要调用系统API。记得之前有看过使用GetSystemTimes函数来获取系统、用户空闲时间,然后通过计算两次时间差来得到CPU利用率。这个方法可能比较直接,但需要处理时间结构体,比如FILETIME,并转换成64位整数进行计算。要注意多核处理器的总利用率可能需要累加所有核心的数据。 然后是内存信息。Windows的GlobalMemoryStatusEx函数可以获取物理内存虚拟内存的使用情况。Qt可能没有封装这个,所以需要直接调用API。使用MEMORYSTATUSEX结构体,并调用GlobalMemoryStatusEx来填充数据。这样可以得到总物理内存可用物理内存,从而计算内存占用率。 开机时间的话,GetTickCount64函数可以获取系统启动后的毫秒数,然后转换为时间格式。不过这个可能只能获取到大约49天的数值,超过会归零,但一般情况下应该够用。或者使用WMI查询,比如Win32_OperatingSystem类的LastBootUpTime属性,但可能需要COM组件操作,代码可能更复杂。 磁盘容量方面,Qt的QStorageInfo类可以直接获取磁盘的总空间可用空间,这应该是跨平台的。所以在Windows下使用QStorageInfo应该没问题,只需要遍历所有存储设备,然后获取相关信息即可。但用户可能需要的是特定磁盘的信息,比如系统盘,可能需要处理盘符的问题。 接下来需要把这些思路整理成代码示例。比如,对于CPU使用率,可能需要一个定时器,定期获取两次系统时间,计算差值。内存信息直接调用GlobalMemoryStatusEx。启动时间用GetTickCount64转换为小时、分钟等。磁盘容量用QStorageInfo。 还需要注意权限问题,比如某些API可能需要管理员权限。另外,不同Windows版本的兼容性,比如GetTickCount64在XP之后才支持,但用户可能使用的是较新的系统。 然后,用户提供的引用中,引用[2][4]提到了Qt的系统监控工具,可能可以参考其中的方法,但具体代码示例可能没有。引用[3][4]提到使用Qt界面显示信息,所以可能需要将获取的数据绑定到UI控件上,比如QLabel或进度条。 还需要处理可能的错误,比如API调用失败,或者QStorageInfo返回无效数据。另外,单位转换,比如字节转换为GB,可能需要除以1024的三次方,并保留两位小数。 最后,将各个部分的代码整合起来,确保每个功能模块独立,并且有注释说明。比如,获取CPU使用率的部分可能需要一个类,定时更新数据;内存磁盘信息可能实时获取;启动时间则只需在启动时获取一次。 可能需要测试各个API在Windows下的表现,确保准确性。例如,CPU使用率的计算是否准确,特别是在多核情况下是否需要调整。内存数据是否实时更新,以及QStorageInfo在Windows下是否能正确识别所有存储设备。 总结下来,步骤是:分别处理CPU内存、启动时间磁盘容量,使用相应的Windows APIQt类,编写示例代码,并注意错误处理单位转换。</think>### 分步解决方案:使用Qt获取Windows系统监控信息 #### 一、获取CPU使用率 1. **原理**:通过Windows API `GetSystemTimes` 获取系统空闲时间、用户态内核态时间,计算两次采样的差值以确定CPU利用率。 2. **实现代码**: ```cpp #include <windows.h> // 定义CPU时间结构体 struct CpuTime { ULARGE_INTEGER idleTime; ULARGE_INTEGER kernelTime; ULARGE_INTEGER userTime; }; // 获取CPU时间差并计算利用率 double getCpuUsage() { static CpuTime prevTime; CpuTime currentTime; FILETIME idleTime, kernelTime, userTime; GetSystemTimes(&idleTime, &kernelTime, &userTime); // 转换时间格式 currentTime.idleTime.LowPart = idleTime.dwLowDateTime; currentTime.idleTime.HighPart = idleTime.dwHighDateTime; currentTime.kernelTime.LowPart = kernelTime.dwLowDateTime; currentTime.kernelTime.HighPart = kernelTime.dwHighDateTime; currentTime.userTime.LowPart = userTime.dwLowDateTime; currentTime.userTime.HighPart = userTime.dwHighDateTime; // 计算时间差 ULONGLONG idleDiff = currentTime.idleTime.QuadPart - prevTime.idleTime.QuadPart; ULONGLONG totalDiff = (currentTime.kernelTime.QuadPart + currentTime.userTime.QuadPart) - (prevTime.kernelTime.QuadPart + prevTime.userTime.QuadPart); prevTime = currentTime; if (totalDiff == 0) return 0.0; return (1.0 - (double)idleDiff / totalDiff) * 100.0; } ``` #### 二、获取内存信息 1. **原理**:使用Windows API `GlobalMemoryStatusEx` 获取物理内存虚拟内存使用情况。 2. **实现代码**: ```cpp #include <windows.h> #include <QDebug> void getMemoryInfo() { MEMORYSTATUSEX memInfo; memInfo.dwLength = sizeof(memInfo); if (GlobalMemoryStatusEx(&memInfo)) { qDebug() << "总物理内存:" << (memInfo.ullTotalPhys / (1024 * 1024)) << "MB"; qDebug() << "可用物理内存:" << (memInfo.ullAvailPhys / (1024 * 1024)) << "MB"; } } ``` #### 三、获取系统启动时间 1. **原理**:通过 `GetTickCount64` 获取系统启动后的毫秒数,转换为可读时间格式。 2. **实现代码**: ```cpp #include <windows.h> #include <QDateTime> QString getSystemUptime() { ULONGLONG tickCount = GetTickCount64(); qint64 seconds = tickCount / 1000; return QDateTime::fromSecsSinceEpoch(seconds).toUTC().toString("hh:mm:ss"); } ``` #### 四、获取磁盘容量 1. **原理**:使用Qt内置的 `QStorageInfo` 类直接获取磁盘信息。 2. **实现代码**: ```cpp #include <QStorageInfo> #include <QDebug> void getDiskInfo() { QList<QStorageInfo> drives = QStorageInfo::mountedVolumes(); foreach (const QStorageInfo &drive, drives) { qDebug() << "磁盘路径:" << drive.rootPath(); qDebug() << "总容量:" << drive.bytesTotal() / (1024 * 1024 * 1024.0) << "GB"; qDebug() << "可用容量:" << drive.bytesAvailable() / (1024 * 1024 * 1024.0) << "GB"; } } ``` #### 五、整合到Qt界面 ```cpp // 在Qt定时器中更新数据 QTimer *timer = new QTimer(this); connect(timer, &QTimer::timeout, [=]() { labelCpu->setText(QString("CPU使用率: %1%").arg(getCpuUsage(), 0, 'f', 1)); getMemoryInfo(); // 更新内存显示 }); timer->start(1000); // 每秒刷新 ``` #### 注意事项 1. **权限**:部分API需要管理员权限(如某些WMI查询),建议以管理员身份运行程序[^2]。 2. **多核CPU**:上述CPU计算方法返回的是整体利用率,若需单核数据需遍历所有处理器[^4]。 3. **跨平台兼容性**:`QStorageInfo` 在Windows/Linux/macOS均可使用,但API调用部分需通过宏区分平台[^3]。 --- ### 引用说明 [^1]: 系统性能监控可通过API直接获取底层数据,例如Windows的`GlobalMemoryStatusEx`Qt的`QStorageInfo`。 : 商业项目中需注意权限稳定性,例如通过定时器实现实时监控。 [^3]: Qt框架的跨平台特性使其适合开发系统监控工具[^3]。 : 源码示例可通过CSDN等平台获取完整实现[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值