您现在的位置是: 首页 > 计算机系统 计算机系统
windows管理器cpu 电源_windows资源管理器cpu
tamoadmin 2024-08-27 人已围观
简介1.如何解决win10管理器占用CPU过高现象2.管理器中cpu使用率一根实线一根虚线分别代表什么?3.为什么管理器占用CPU50啊?01关闭家庭组控制面板–管理工具–服务– HomeGroup Listener和HomeGroup Provider禁用。02关闭磁盘碎片整理、自动维护任务选中磁盘C-属性–工具–对驱动器进行优化和碎片整理–优化–更改设置–取消选择按运行。03关闭Windows D
1.如何解决win10管理器占用CPU过高现象
2.管理器中cpu使用率一根实线一根虚线分别代表什么?
3.为什么管理器占用CPU50啊?
01关闭家庭组
控制面板–管理工具–服务– HomeGroup Listener和HomeGroup Provider禁用。
02关闭磁盘碎片整理、自动维护任务
选中磁盘C-属性–工具–对驱动器进行优化和碎片整理–优化–更改设置–取消选择按运行。
03关闭Windows Defender(视情况而定)
控制面板–Windows Defender –设置–实施保护-去掉勾和管理员–启用 Windows Defender –去掉勾。
控制面板–管理工具–服务- Windows Defender Service禁用。
04关闭Windows Search
控制面板–管理工具–服务- Windows Search禁用。
05设置好 Superfetch 服务
控制面板–管理工具–服务– Superfetch -启动类型–自动(延迟启动)。
06清理Windows.old文件夹
C盘–右键–属性-磁盘清理-选中以前的Windows 安装复选框–确定清理。
07设置自动登陆
Win+R–输入netplwiz-取消使用计算机必须输入用户名和密码的选项–然后双击需要自动登录的账户–输入你的密码。
08关闭ipv6
网络共享中心–网络连接–以太网–属性–取消 ipv6 。
09关闭特效
系统属性–高级-性能-设置–视觉效果-关闭淡出淡入效果。
10关闭虚拟内存
系统属性–高级-性能-设置,选择“高级”,点击虚拟内存中的“更改”,将“自动管理驱动器的分页文件大小”对勾去掉,点击下面的“无分页文件”,点击“设置”并“确定”即可。
如何解决win10管理器占用CPU过高现象
右侧共有3类CPU图表,其中一类是CPU总计,代表物理计算机总体的CPU占有率情况,
其中蓝色粗线条代表CPU当前的运行频率所占标称频率的百分比,绿色细线条代表当前系统的CPU占有率。
另外一类是服务CPU使用率,显示Windows系统中服务的占有率。第三类是物理计算机中每个逻辑处理器的CPU占有率,会给这两个逻辑处理器分别显示CPU占有率图表。
扩展资料:
电脑上的监视器是一个MMC管理单元,它是一个可以帮助用户分析系统性能的工具。通过它可以实时监控计箅机系统的使用情况,可以随时了解当前计算机的运行情况。
如哪些应用使汁算机变得缓慢,哪些操作使系统出现错误等。可以让系统有效地分配到最需要的服务、程序和进程中去,提髙计算机的工作效率。
主要用来监控CPU,内存,磁盘,网络的实时使用状况,例如那些进程和服务占用了多少CPU,内层,硬盘,消耗了多少网络,以及外网和内网的详细IP地址端口。
管理器中cpu使用率一根实线一根虚线分别代表什么?
方法一:减少电脑启动项
按Win+R键打开运行窗口,输入msconfig,点击确定;
在系统配置窗口中,切换至启动项,点击打开任务管理器,禁用一些不必要的启动项。
方法二:在任务管理器中结束相应的进程
按Ctrl+Alt+Del键打开任务管理器,查看哪个内存占用率高就结束该程序。
方法三:查看电脑是否中
CPU使用率过高也有可能是电脑中了。使用杀毒软件对电脑进行全盘查杀,需断网。
方法四:关闭电脑上的各种应用效果
右击桌面上的此电脑图标,选择属性,然后点击左侧的高级系统设置;
点击性能下面的设置按钮,取消勾选一些没有用的视觉特效。
方法五:禁用Connected User Experiences and Telemetry服务
按Win+R键打开运行窗口,输入services.msc,点击确定;
找到并双击打开Connected User Experiences and Telemetry,将启动类型设置为禁用,并停止该服务。 设置好 Superfetch 服务 控制面板–管理工具–服务– Superfetch
-启动类型–自动(延迟启动)。
为什么管理器占用CPU50啊?
CPU性能管理器有两条线是任务管理器默认勾选显示内核时间导致的,实线是CPU利用率,虚线是内核时间。
内核时间是线程执行操作系统代码已经经过了多少个100ns(纳秒)的时间,也就是CPU在内核态(kernel mode)运行的时间,相对于用户态(user mode),一个用户进程的线程调用某些api后会进入内核态,此时的CPU占用会被记入内核时间。
查看该图表可以知道您当前使用的处理时间是多少。如果您的计算机运行较慢,该图表就会显示较高的百分比。
这里CPU主频比较高是CPU处于超频工作状态导致的。
先说说我在没查阅任何资料之前的做法:
这里要先明确一点,
任务管理器(taskmgr)里面显示50%并非意味着当前cpu真就工作在一半的频率下,
仔细观察可以发现,
taskmgr的cpu使用率图表是周期性刷新的,
也就是说每经过一个interval期间,
cpu活动(执行指令)的时间和空闲(挂起)时间刚好相等的话,
那么就可以认为cpu占用率为50%,
表面上看就可以认为cpu的运行频率降低了(实际上没有).
有了上面的认识,
就可以得到一个大致的思路:
在程序中首先执行一定规模的代码,
然后调用sleep()函数让线程挂起x(ms),
如此周而复始,
如果代码执行花费的时间和挂起时间大致相等,
那么从一个interval来看,
cpu占用率正好就是50%.
有了这个初步想法,
那么难点就在于如何估算执行代码所花费的时间了,
要执行一定规模的的代码,
最简单的方法就是写一个busy
loop(也就是空循环),
比如for(i
=
0;
i
<
n;
i++);如果能合理估算出这段代码的运行时间,
那么就可以知道需要挂起多长时间了.
之所以选用busy
loop而不是其他api之类的,
是因为它不需要调用任何privilege
instruction(没有io操作等),
这样就不会在运行中影响内核时间,
因为内核在运行privilege
instruction时我们是无法控制的,
要使得50%的曲线更加平滑,
就应该尽量减少uncontrolable的内核时间.
所以busy
loop是最简单最容易估算的代码段了.
接下来是估算:
分析for(i
=
0;
i
<
n;
i++);可以大致推算出每次循环需要5行汇编代码
loop:
mov
dx
i
add
dx
1
mov
i
dx
cmp
i
n
jmp
loop
(很久以前学的汇编,
忘记了那个判断大小后跳转的语句怎么写了...凑合一下吧)
我的cpu是p4
2.4ghz,
等于2.4
*
10的9次方个时钟周期每秒,
记得以前上微机原理时说现代cpu每个时钟周期可以执行2条以上的代码,
那么我就取平均2条,
于是让
(2400,000,000
*
2)
/
5
=
960000000(循环/秒),
也就是说,
cpu一秒钟可以运行那个循环960000000次.
不过我们还是不能简单地将n
=
960000000,
然后sleep(1000)了事.
因为windows并不是一个独占的实时系统,
而是一个抢先式多任务系统,
分配给某个线程的运行时间片是会被其他更高优先级的线程抢先的,
而且taskmgr的刷新率也小于1s,
如果我们让cpu工作1s,
挂起1s,
波形很有可能就是呈现锯齿状的,
先达到一个峰值(大于>50%),
然后跌到一个很低的占用率!
于是我尝试着降低两个数量级,
令n
=
9600000,
而sleep(10).
用10ms是因为它不大也不小,
1ms的话会造成线程频繁地被唤醒和挂起,
无形中又是增加了内核时间的不确定性影响.
可以得到代码如下:
#include
int
main()
{
for(;
{
for(i
=
0;
i
<
9600000;
i++);
sleep(10);
}
return
0;
}
编译,
尽量关闭其他应用程序,
停掉能停的服务,
然后运行,
bingo!
在我的机器上,
已经显示cpu在50%附近了,
但是还有小幅度抖动,
此时适当调整n的大小,
几次尝试运行后就可以得到一个相对平滑的结果了!
为了验证我的推算正确性,
我又找了几台机器试了一下,
发现不同的cpu得到的结果会有所不同,
在一个p4
3.2ghz
ht的cpu上,
关掉ht功能,
得到7680000
6ms是比较好的结果,
同时还发现一个好玩的现象,
就是开了ht功能后,
就不用sleep()函数了,
直接写一个无限循环就可以让cpu跑在50%左右,
这可谓是最简单的方法
:),
而在迅驰和mobile系列cpu上由于运行频率会动态改变,
所以实现起来估算和实际情况出入比较大.
在程序运行起来后,
在taskmgr里面将它的优先级设置为最高(减少争用)也可以一定程度上让波形平滑一些.
而打开内核时间的显示后可以发现,
波形的抖动基本上都是由内核活动影响的.
根据这个原理,
让cpu波形维持在50%以外的数值也不是不可能的,
关键是让循环次数和挂起时间进行匹配,
而且它们的数量级还与cpu时间片分配和taskmgr波形刷新周期有关.
先估算一个值,
然后根据比例放大或者缩小,
再进行细微调整,
找到两个合适的数值不是难事.
而且,
有了根据这个原理,
还可以让cpu波形呈现sin()函数的形式,
比如先对0'~180'间取10'区间进行取样,
得到一个函数值数组,
然后根据数组的值对busy
loop中的循环数和挂起时间进行换算修改,
从理论上来说是这肯定可行的,
不过指令数一多一复杂估算的精确性就会降低.
为了了解taskmgr的工作原理,
我查阅了一下相应的api资料,
发现两个函数queryperformancefrequency()和queryperformancecounter()可以精确得到一段代码的运行时间,
于是想到可以构造两个相同的大busy
loop,
先在程序开头算出运行所需的精确时间,
然后用它来对sleep()函数进行赋值,
这样也可以实现某种意义上的自动化(不用估算了xd...)
修改程序如下:
#include
int
main()
{
int
i
=
96000000,
j
=
0;
large_integer
freq
=
{0};
large_integer
start
=
{0};
large_integer
end
=
{0};
dword
elapse
=
0;
queryperformancefrequency(&freq);
printf("freq
=
%u\n",
freq.quadpart);
queryperformancecounter(&start);
queryperformancecounter(&end);
longlong
overhead
=
end.quadpart
-
start.quadpart;
printf("overhead
=
%d\n",
overhead);
queryperformancecounter(&start);
for(i
=
0;
i
<
9600000;
i++);
queryperformancecounter(&end);
longlong
temp
=
(end.quadpart
-
start.quadpart
-
overhead);
printf("temp
=
%d\n",
temp);
elapse
=
(dword)(((double)temp
/
(double)freq.quadpart)
*
1000.0);
printf("elapse
=
%lf\n",
temp2);
for(;
{
for(i
=
0;
i
<
9600000;
i++);
sleep(elapse);
}
return
0;
}
不过精确计算的结果似乎并不能得到更平滑的图像,
因为我甚至连两次调用api的花费都减掉了,
也许是过犹不及吧...总之我实验的结果是比较粗糙.
最后总结一下两个心得:
1.
尽量减少sleep/aweak的频率和花费,
如果频繁发生的话影响会很大.
2.
尽量不要调用system
call(i/o这些privilege
instruction),
因为它会导致很多uncontrolable的kernel
time.
3.
由于抢先式多任务的争用性质,
想要精确控制曲线几乎是不可能的...
(不知这个结论是不是很绝对,
如果有办法用hack的方法hook入taskmgr的函数调用点,
修改它的返回值,
那么想显示什么波形就显示什么波形了,
我是没有功力做这么"伟大"的事情了...)