使用GetProcessMemoryInfo查找内存利用率

使用GetProcessMemoryInfo查找内存利用率,c,windows,C,Windows,在我的应用程序中,我试图使用下面提到的api计算windows机器中特定进程的内存利用率 GetProcessMemoryInfo(hProcess,&info,sizeof(info)); 当我检查info.WorkingSetSize的值时,它正好是14757395258967641292 所以我想弄清楚返回值是否以字节为单位(对于肉眼来说,这不能是字节格式)?如果没有,如何将其转换为字节或千字节 无效PrintProcessNameAndID(DWORD processID) { TCHA

在我的应用程序中,我试图使用下面提到的api计算windows机器中特定进程的内存利用率

GetProcessMemoryInfo(hProcess,&info,sizeof(info)); 当我检查info.WorkingSetSize的值时,它正好是14757395258967641292

所以我想弄清楚返回值是否以字节为单位(对于肉眼来说,这不能是字节格式)?如果没有,如何将其转换为字节或千字节

无效PrintProcessNameAndID(DWORD processID)

{

TCHAR szProcessName[MAX_PATH]=TEXT(“”);
进程内存计数器信息,信息1,信息2;
大小记忆;
一号、二号、三号、四号;
//掌握这个过程。
HANDLE hProcess=OpenProcess(进程\查询\信息|
进程_VM _READ,
FALSE,processID);
//获取进程名称。
if(NULL!=hProcess)
{
hmodulehmod;
德沃德;
if(enumProcessModule(hProcess,&hMod,sizeof(hMod)),
&CBP(需要)
{
GetModuleBaseName(HPProcess、hMod、szProcessName、,
sizeof(szProcessName)/sizeof(TCHAR));
}
}
//打印进程名称和标识符。
//_tprintf(文本(“%s(PID:%u)”),szProcessName,processID);
GetProcessMemoryInfo(hProcess,&info,sizeof(info));
MemoryUsage=(info.WorkingSetSize);

}某些windows进程所需的值小于
进程查询信息
(例如
进程查询有限信息

结果是OpenProcess可能返回NULL

这是在测试中处理的,但是,您总是调用
GetProcessMemoryInfo


结果将是一个失败的调用。由于
info
的未初始化内存导致一些随机值(0xCCD000)。

该值似乎非常大。请出示您的代码,另请参阅此帖子嗨,我从这里获取了完整的代码您是指这个printf(“\t工作集大小:0x%08X\n”,pmc.WorkingSetSize);?不,我没有使用printf语句,实际上我正在调试,所以我知道了值SIZE\t MemoryUsage=(info.WorkingSetSize);这里我得到了上面提到的memoryusage值。14757395258967641292不是意外值,它是十六进制的0xCCCC。用于在调试生成中初始化内存的值。因此,您正在查看未初始化的数据,GPMI失败。初始化info.cb真的,真的不是可选的。
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
PROCESS_MEMORY_COUNTERS info, info1, info2;
SIZE_T MemoryUsage;
SIZE_T one,two,three, four;
// Get a handle to the process.

HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                               PROCESS_VM_READ,
                               FALSE, processID );

// Get the process name.

if (NULL != hProcess )
{
    HMODULE hMod;
    DWORD cbNeeded;

    if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), 
         &cbNeeded) )
    {
        GetModuleBaseName( hProcess, hMod, szProcessName, 
                           sizeof(szProcessName)/sizeof(TCHAR) );
    }
}

// Print the process name and identifier.
//_tprintf( TEXT("%s  (PID: %u)"), szProcessName, processID );
GetProcessMemoryInfo(hProcess, &info, sizeof(info));
MemoryUsage = (info.WorkingSetSize);