获取进程的内存(专用工作集)
来源:互联网 发布:js给标签删除属性 编辑:程序博客网 时间:2024/06/03 18:53
#include <iostream>
#include <windows.h>
#include <psapi.h>
#pragma comment(lib,"psapi.lib")
using namespace std;
SIZE_T CalcWorkSetPrivate(HANDLE hProcess, SIZE_T pageSize)
{
BOOL bRet = TRUE;
PSAPI_WORKING_SET_INFORMATION workSetInfo;
PBYTE pByte = NULL;
PSAPI_WORKING_SET_BLOCK *pWorkSetBlock = workSetInfo.WorkingSetInfo;
memset(&workSetInfo, 0, sizeof(workSetInfo));
// 要求操作进程的权限:PROCESS_QUERY_INFORMATION and PROCESS_VM_READ
// 第一次调用获取实际缓冲区大小
bRet = ::QueryWorkingSet(hProcess, &workSetInfo, sizeof(workSetInfo));
if(!bRet) // 调用失败
{
if(GetLastError() == ERROR_BAD_LENGTH) // 需要重新分配缓冲区
{
DWORD realSize = sizeof(workSetInfo.NumberOfEntries)
+ workSetInfo.NumberOfEntries*sizeof(PSAPI_WORKING_SET_BLOCK);
try
{
pByte = new BYTE[realSize];
memset(pByte, 0, realSize);
pWorkSetBlock = (PSAPI_WORKING_SET_BLOCK *)(pByte + sizeof(workSetInfo.NumberOfEntries));
// 重新获取
if(!::QueryWorkingSet(hProcess, pByte, realSize))
{
delete[] pByte; // 清理内存
return 0;
}
}
catch(char *e) // 分配内存失败
{
// e->Delete();
return 0;
}
}
else // 其它错误,认为获取失败
return 0;
}
SIZE_T workSetPrivate = 0;
for (ULONG_PTR i = 0; i < workSetInfo.NumberOfEntries; ++i)
{
if(!pWorkSetBlock[i].Shared) // 如果不是共享页
workSetPrivate += pageSize;
}
if(pByte)
delete[] pByte;
return workSetPrivate;
}
void main( )
{
PERFORMANCE_INFORMATION performanceInfo;
memset(&performanceInfo, 0, sizeof(performanceInfo));
if(!::GetPerformanceInfo(&performanceInfo, sizeof(performanceInfo)))
return ;
SIZE_T m_stPageSize = performanceInfo.PageSize; // 获取页面大小, 单位:byte
SIZE_T d = CalcWorkSetPrivate(OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, 11460 ), m_stPageSize);
printf("%d\n",d);
system("pause");
}
#include <windows.h>
#include <psapi.h>
#pragma comment(lib,"psapi.lib")
using namespace std;
SIZE_T CalcWorkSetPrivate(HANDLE hProcess, SIZE_T pageSize)
{
BOOL bRet = TRUE;
PSAPI_WORKING_SET_INFORMATION workSetInfo;
PBYTE pByte = NULL;
PSAPI_WORKING_SET_BLOCK *pWorkSetBlock = workSetInfo.WorkingSetInfo;
memset(&workSetInfo, 0, sizeof(workSetInfo));
// 要求操作进程的权限:PROCESS_QUERY_INFORMATION and PROCESS_VM_READ
// 第一次调用获取实际缓冲区大小
bRet = ::QueryWorkingSet(hProcess, &workSetInfo, sizeof(workSetInfo));
if(!bRet) // 调用失败
{
if(GetLastError() == ERROR_BAD_LENGTH) // 需要重新分配缓冲区
{
DWORD realSize = sizeof(workSetInfo.NumberOfEntries)
+ workSetInfo.NumberOfEntries*sizeof(PSAPI_WORKING_SET_BLOCK);
try
{
pByte = new BYTE[realSize];
memset(pByte, 0, realSize);
pWorkSetBlock = (PSAPI_WORKING_SET_BLOCK *)(pByte + sizeof(workSetInfo.NumberOfEntries));
// 重新获取
if(!::QueryWorkingSet(hProcess, pByte, realSize))
{
delete[] pByte; // 清理内存
return 0;
}
}
catch(char *e) // 分配内存失败
{
// e->Delete();
return 0;
}
}
else // 其它错误,认为获取失败
return 0;
}
SIZE_T workSetPrivate = 0;
for (ULONG_PTR i = 0; i < workSetInfo.NumberOfEntries; ++i)
{
if(!pWorkSetBlock[i].Shared) // 如果不是共享页
workSetPrivate += pageSize;
}
if(pByte)
delete[] pByte;
return workSetPrivate;
}
void main( )
{
PERFORMANCE_INFORMATION performanceInfo;
memset(&performanceInfo, 0, sizeof(performanceInfo));
if(!::GetPerformanceInfo(&performanceInfo, sizeof(performanceInfo)))
return ;
SIZE_T m_stPageSize = performanceInfo.PageSize; // 获取页面大小, 单位:byte
SIZE_T d = CalcWorkSetPrivate(OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, 11460 ), m_stPageSize);
printf("%d\n",d);
system("pause");
}
阅读全文
0 0
- 获取进程的内存(专用工作集)
- Go1.9获取Windows进程专用内存工作集
- 在WPF中获取程序的专用工作集内存 PerformanceCounter
- 工作设置内存与内存专用工作集 区分
- windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解
- windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解
- windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解
- windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解
- windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解
- 进程的最大工作集和最小工作集----虚拟内存---物理内存----内存分页机制
- Windows 内存详解(二) windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解
- 操作进程的工具类(获取进程总数,获取总内存,获取可用内存,获取进程信息,杀死进程)
- vc怎样通过进程名获取进程的工作目录.
- 通过进程名获取进程的工作目录
- 获取WinCE进程的内存信息
- 获取WinCE进程的内存信息
- Win32 获取进程占用的内存信息
- 系统和进程获取内存的理解
- PHP1 面向对象
- JS动态创建css的两种方法
- 《高性能MySQL》学习笔记四
- QAQ &火星情报局 哥德巴赫猜想 logn素数判定
- 网易编程题--跳石板
- 获取进程的内存(专用工作集)
- MVC 微信开发获取用户OpenID
- jquery修改a标签的href链接和文字
- 【OpenCV开发之一】关于OpenCV安装的问题
- 批量下载pylot源码实例脚本解决提示“这种类型的文件可能会损害您的计算机。”
- 虚拟机桥接网络设置
- PHP5.5-哈希加密和匹配
- HTML笔记-5
- PHP3 设计模式、COMPOSER、异常处理