首页 > 系统相关 >【windows】测试获取进程资源占用的API的性能消耗

【windows】测试获取进程资源占用的API的性能消耗

时间:2023-02-25 11:57:56浏览次数:43  
标签:NtQuerySystemInformation 调用 windows 占用 dll API 进程 CPU

背景

  • 一次性获取所有进程信息的API:NtQuerySystemInformation
  • 分别获取进程的cpu、mem、io的API:GetProcessTimes、GetProcessMemoryInfo、GetProcessIoCounters
    如果关注进程的cpu/mem/io占用情况,调用哪个接口更省资源?

实验

起两个线程,一个线程中循环调用NtQuerySystemInformation 1W次; 一个线程中先获取到所有进程的handle,然后调用3个单独获取资源的接口1W次。观察谁能更快执行完?

结果

函数名 CPU 总计[单位,%] 自 CPU [单位,%] 模块
| - TestNtQuerySystemInformation 22144 (56.31%) 1 (0.00%) PerformanceTest.exe
| - TestSysPerf 16533 (42.04%) 4 (0.01%) PerformanceTest.exe

函数名 CPU 总计[单位,%] 自 CPU [单位,%] 模块
| - [外部调用] NtQuerySystemInformation 21561 (54.82%) 21561 (54.82%) ntdll.dll
| - [外部调用] GetProcessIoCounters 6733 (17.12%) 6733 (17.12%) kernel32.dll
| - [外部调用] GetProcessTimes 4399 (11.19%) 4399 (11.19%) KernelBase.dll
| - [外部调用] K32GetProcessMemoryInfo 2593 (6.59%) 2593 (6.59%) KernelBase.dll

结果是NtQuerySystemInformation会消耗更多资源,其他3个接口相加仍然小于NtQuerySystemInformation
原先我猜想单项资源查询接口内部可能存在无效的轮询逻辑等,然而实际结果和预期不符。
因此如果只关注进程的主要指标,可以通过分别调用单项资源查询接口来节省功耗。

标签:NtQuerySystemInformation,调用,windows,占用,dll,API,进程,CPU
From: https://www.cnblogs.com/mooooonlight/p/17154077.html

相关文章

  • Windows黑客编程之Bypass UAC
    描述用管理员权限运行CompMgmtLauncher.exe,由于它是白名单程序,不会被UAC拦截,可以直接以管理员权限运行CompMgmtLauncher的功能是去遍历指定注册表路径下的程序,并启动只......
  • The bean ‘api‘, defined in class path resource [com/common/swagger/SwaggerAuto
    Thebean‘api‘,definedinclasspathresource[com/common/swagger/SwaggerAutoConf1.解决办法-1将重复的bean覆盖掉加一个这个注解spring.main.allow-bean-definit......
  • Windows常见问题处理
    默认启动系统选择运行输入msconfig将不用的引导删除重启进入bios/U盘win+X呼出快捷操作面板。按住shift不放,点击关机或注销,再点击重启a.使用设备->选择U盘......
  • Windows黑客编程之提升进程令牌权限
    描述利用AdjustTokenPrivileges提升进程的令牌访问权限代码外层调用#include"stdafx.h"#include"AdjustToken.h"int_tmain(intargc,_TCHAR*argv[]){ if(......
  • 信息安全之windows服务器的基线安全(等保要求)
    windows服务器的基线安全(等保要求参考)下图是需要做基线配置的选项备注:具体都已经贴出来了,按照这个参考可以达标合格,有部分需要人工现场核实确认,这个要根据具体环境进行操......
  • LInux 查看端口占用和程序信息
    一、环境CentOS7.92009二、场景1.查看所有端口占用情况sudonetstat-lntp注意最右侧的PID一列,可以根据PID查找到占用端口的程序所在路径。2.查询占用端口的......
  • Windows下QT生成的程序默认以管理员身份运行
    只需要在工程文件.pro中添加下面这行:QMAKE_LFLAGS+=/MANIFESTUAC:\"level=\'requireAdministrator\'uiAccess=\'false\'\" 生成的exe就会带上盾牌标志,双击就以管......
  • 信息安全之基线管理与安全配置—Windows安全配置
    一、Windows安全配置简介二、账户配置根据需求可以进行相关配置(里面有说明)1、密码策略  密码最短期限:意思就是密码更改后,多少天内能再次更换密码2、用户权......
  • c# 调用chatgpt api
    前提:要有chatgpt账号,不会注册的关注抖音:21402780125,有免费教程!!在C#中调用ChatGPTAPI,您可以使用.NET内置的HTTPClient类或第三方的RestSharp类库。以下是使用.......
  • c语言调用chatgpt api
    前提:要有chatgpt账号,不会注册的关注抖音:21402780125,有免费教程!!在C语言中调用ChatGPTAPI,您需要使用C的网络编程库(例如libcurl)发送HTTP请求。以下是使用libcurl......