我有一个在windows资源管理器中运行的程序。通常,如果没有其他程序在运行,它将占用2-3%的CPU (因此explorer.exe会在资源监视器中显示2-3% )。当我的程序没有运行,而另一个不会增加explorer.exe CPU使用率的程序(例如FireFox)正在运行时,explorer.exe CPU使用率将可以忽略不计。
然而,当我的程序和另一个程序同时运行时,explorer.exe的使用率会增加到8-10%。
我注意到在windows资源管理器中运行的其他程序也会发生同样的事情。
有人知道为什么会发生这种情况吗?这是Windows固有的原因,还是有其他程序可能导致这种情况?
附注:这与Internet Explorer (iexplorer.exe)无关
发布于 2011-02-26 23:14:50
这是因为任务切换(可能还有额外的分页)。如果只有一个程序需要大量的CPU时间和/或内存访问,那么它将被赋予许多CPU时间片,因此将能够在“长”时间内不中断地运行。另一方面,如果多个进程需要大量的CPU时间,Windows将频繁地在它们之间进行任务切换,从而引入额外的开销(因为它需要在每个任务切换上存储/加载进程状态)。如果你有两个CPU,这就不会有太大的问题,但仍然是可以测量的,因为后台进程也需要注意,尽管频率较低。
有关更多信息,请参阅此处:
http://en.wikipedia.org/wiki/Context_switch
如果这困扰你,你可以试试这个,但我不确定这是否有效,所以如果它不起作用,请不要投反对票:
在你的程序中插入睡眠(10)调用;你的程序应该得到更长但频率更低的时间片:
http://msdn.microsoft.com/en-us/library/ms686298%28VS.85%29.aspx
发布于 2011-02-27 00:47:30
explorer订阅文件系统事件,以便在文件更改大小、日期、创建的新文件等时更新其显示。
如果另一个进程正在接触大量文件,它可能会增加资源管理器必须执行的工作,从而增加资源管理器的CPU利用率。
https://stackoverflow.com/questions/5127492
复制相似问题