-1
私は、C++の32ビットプロセスからの64ビットアプリケーションのプロセスメモリ使用量(WorkingSetSize
)を測定しようとしています。私はToolhelp
を使用してみました:32ビットプログラムで64ビットプロセスのメモリ使用量を測定するにはどうすればよいですか?
void GetProcMemoryInfo(const wchar_t * procName)
{
PROCESSENTRY32 entry;
entry.dwSize = sizeof(PROCESSENTRY32);
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (Process32First(snapshot, &entry) == TRUE)
{
while (Process32Next(snapshot, &entry) == TRUE)
{
if (wcscmp(entry.szExeFile, procName) == 0)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);
PROCESS_MEMORY_COUNTERS objProcessMemoryInfo;
if (GetProcessMemoryInfo(hProcess, &objProcessMemoryInfo, sizeof(objProcessMemoryInfo)))
{
wchar_t szProcessMemoryInfo[100];
wsprintf(szProcessMemoryInfo, L"Working Set Bytes (MB): %d\n", objProcessMemoryInfo.WorkingSetSize/(1024 * 1024));
OutputDebugString(szProcessMemoryInfo);
}
CloseHandle(hProcess);
}
}
}
CloseHandle(snapshot);
}
このソリューションは正常に動作しますが、それはx64
アプリケーションとして構築だ場合にのみ。それ以外の場合 - 最大値は2^32
です。場合によってはPROCESS_MEMORY_COUNTERS
が内部でSIZE_T
を使用していると思います。プロセスのメモリ使用量を測定する他の方法はありますか?
エミュレータの内部からではなく、64ビットプロセスからこれを行います。 –
@DavidHeffernan最終行は32ビットプロセスから行う必要があります。それを使用するアプリケーションは32ビットです。 – pSoLT
ここに記載されているalredy:http://stackoverflow.com/questions/15574638/measuring-process-peak-memory-usage-post-mortem、構造体のフィールドのサイズは、htによって呼び出されるprocess'esのビット数と測定されたプロセスがx86-64である場合にオーバーフローが発生する可能性があります。したがって、x86-64プロセスを使用して測定を行います。 x86-64であるメモリの消費量を測定するだけの「プロキシ」アプリケーションを作成し、その値をリモートまたは他のIPC経由で元のx86プロセスに渡すことができます。 –