|

分享源码
界面截图: |
|
是否带模块: |
纯源码 |
备注说明: |
- |
本帖最后由 z13228604287 于 2020-11-6 16:58 编辑
SIZE_T CalcWorkSetPrivate()
{
PERFORMANCE_INFORMATION performanceInfo;
memset(&performanceInfo, 0, sizeof(performanceInfo));
if (!::GetPerformanceInfo(&performanceInfo, sizeof(performanceInfo)))
return 0;
SIZE_T pageSize = performanceInfo.PageSize;
HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, GetCurrentProcessId());
BOOL bRet = TRUE;
PSAPI_WORKING_SET_INFORMATION workSetInfo;
PBYTE pByte = NULL;
PSAPI_WORKING_SET_BLOCK* pWorkSetBlock = workSetInfo.WorkingSetInfo;
memset(&workSetInfo, 0, sizeof(workSetInfo));
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)
{
return 0;
}
}
else
return 0;
}
SIZE_T workSetPrivate = 0;
for (ULONG_PTR i = 0; i < workSetInfo.NumberOfEntries; ++i)
{
if (!pWorkSetBlock.Shared)
workSetPrivate += pageSize;
}
if (pByte)
delete[] pByte;
return workSetPrivate/1024;
}
|
|