win7 system进程 ntoskrnl.exe占用CPU很高

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了win7 system进程 ntoskrnl.exe占用CPU很高相关的知识,希望对你有一定的参考价值。

其实这是很正常的现象。我估计很有可能是你电脑内存的问题,本来win7系统就很吃内存,2G的DDR3也就只能流畅运行而已,所以既然用了win7系统,那么4G的DDR3内存也是不嫌多的,这就又涉及到了系统的问题,32位的系统最多只能识别3G左右的内存,因此用了4G的内存之后,系统也要相应地换成64位的系统。要是电脑的硬件和软件都没有问题的话,其实开机的时候有很多诸如杀毒软件之类的程序都是要自动运行的,因此电脑的CPU占用率自然也就高,关机的时候要关闭所有你之前所使用过的程序,因此关机也会慢些,只要电脑使用良好,这些是没必要太在意的。而且我估计你这个是笔记本,相对于台式机而言,笔记本的散热要差很多,因此一定的反应迟缓应该是被接受的。只要电脑运行良好,不影响使用不必太在意。如果实在想要快的反应速度,换XP吧,系统出来这么多年,精简得很,就是界面不大好看。要是有什么问题的还可以继续问我,望采纳。 参考技术A 以前,当物理内存快要耗尽的时候,windows会把一些不常用的内存数据转移到硬盘上的虚拟内存文件(pagefile)里,以释放物理内存给需要的程序。这样做有个坏处:当你又需要访问保存在pagefile里的数据的时候,因为需要从硬盘里读取,所以速度会非常慢,毕竟硬盘和内存的速度天差地别,即使你用的是ssd。
而更好的解决方案就是把这些数据继续留在物理内存里。但是物理内存已经见底,怎么办呢?win10使用了内存压缩技术,将一部分不常使用的内存数据打包压缩起来,等到有程序需要访问那些数据的时候,再解压缩出来。因为这些都是在内存中进行的,所以速度非常快,用户不会感觉到从硬盘读取数据时候的卡顿感。唯一的额外开销可能就是增加了cpu使用率,毕竟要压缩和解压缩,不过在当今cpu过剩的时代,这根本不算事儿。
当然,内存压缩只会在物理内存使用率较高的时候才会发生,所以不会每个人都有一个内存占用超高的system进程。而且内存压缩也是有极限的,内存数据确实太多的话,win10还是会把一部分数据放到硬盘上。

如何使用 Win32 API 在 WinForm 前显示 System.Diagnostics

【中文标题】如何使用 Win32 API 在 WinForm 前显示 System.Diagnostics【英文标题】:How To Show System.Diagnostics In Front Of WinForm Using Win32 API 【发布时间】:2012-10-19 02:58:01 【问题描述】:

在我的主窗体上,我有一个 ListView,其中包含属于我们软件套件的进程的 LargeIcon 视图列表。每个 LV (ListView) 项目都包含文本和图像,该图像与我们用于相应应用程序(即 MarinaOffice、LaunchOffice、PureRental 等)的软件产品的图标相同。有一个计时器根据是否在 Process.GetProcesses() 方法调用中找到进程来更新列表。当用户单击正在运行的进程的 ListView 项时,它应该最大化并在当前进程前面显示该进程(即 WinForms 应用程序)的窗口。下面的代码几乎可以完成我想要完成的工作,但是,如果我想要显示的应用程序已经最大化,但是在我在监视器上的 windows 应用程序后面,它不会将我显示的进程放在前面我的申请。换句话说,只要我使用下面的 WIN32 方法显示的应用程序被最小化,它就可以工作。但是,它已经被最大化了,它没有。

// Used to Show Other Process Windows
private const int SW_SHOWMAXIMIZED = 3;
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);    

// Method that checks for running apps in our suite every 3000ms
private void timerRunningApps_Tick(object sender, EventArgs e)

    CheckRunningapps();


// Stripped down version of method that looks for running process in our suite and 
// adds the process name and icon to a ListView on our main form
private void CheckRunningapps()

    List<Process> AllProcesses = System.Diagnostics.Process.GetProcesses().ToList();

    listViewRunningApps.BeginUpdate();
    listViewRunningApps.Items.Clear();

    foreach (Process process in AllProcesses)
    
        ListViewItem lvi = new ListViewItem();
        if (process.ProcessName.ToLower().Contains("marinaoffice"))
        
            lvi = new ListViewItem("MarinaOffice");
            lvi.SubItems.Add("MarinaOffice");
            lvi.ImageIndex = 1;
            lvi.Tag = process;
            listViewRunningApps.Items.Add(lvi);
        
    

    listViewRunningApps.EndUpdate();


// Method that actually shows the process.  This works as long as process is minimized
// However, if the process is maximized but, merely behind the current window it does
// not bring it in front.  I have noticed that there is a ShowWindowAsync method.
// Should I use that instead?
private void listViewRunningApps_MouseDoubleClick(object sender, MouseEventArgs e)

    ListViewItem lvi = listViewRunningApps.GetItemAt(e.X, e.Y);
    if (lvi != null)
    
        Process process = (Process)lvi.Tag;
        ShowWindow(process.MainWindowHandle, SW_SHOWMAXIMIZED);
    

【问题讨论】:

你试过BringWindowToTop 我只是尝试用 BringWindowToTop(process.MainWindowHandle) 替换 ShowWindow(process.MainWindowHandle, SW_SHOWMAXIMIZED) 并且它使屏幕闪烁,但是没有任何反应。我所做的只是为BringWindowToTop 导入DLL 和extern 函数。这对我来说是新的,所以我需要做些不同的事情吗? 不要替换它在ShowWindow之后添加它 知道了,我马上试试…… 你就是那个男人。效果很好!如果您输入一个快速的答案,我肯定会接受并投票,以便您获得信用。 【参考方案1】:

尝试这样的事情,我认为发生的事情是,如果窗口已经最大化,则您不会使用 ShowWindow Call 更改窗口状态,在这种情况下,您还需要将其带到 Z-Order 的前面使用BringWindowToTop 方法。

Process process = (Process)lvi.Tag; 
ShowWindow(process.MainWindowHandle, SW_SHOWMAXIMIZED);
BringWindowToTop(process.MainWindowHandle); 

【讨论】:

再次感谢,这完全符合我的要求!

以上是关于win7 system进程 ntoskrnl.exe占用CPU很高的主要内容,如果未能解决你的问题,请参考以下文章

win7 system进程 ntoskrnl.exe占用CPU很高

启动phpstyle Apache的80端口被win7的System PID=4的进程占用的解决方法

Win7系统中WmiPrvSE是啥进程?WmiPrvSE.exe会是病毒吗

查找iis的进程被哪些程序配置

system进程ntoskrnl磁盘占用高怎么解决

win7下startup怎么没有了