Консультация № 109696
16.11.2007, 14:24
0.00 руб.
0 1 1
Всем добрый день! Вопрос - как можно определить объем оперативной памяти занимаемый приложением (внутри этого приложения)? Заранее спасибо.

Обсуждение

Неизвестный
16.11.2007, 21:06
общий
это ответ
Здравствуйте, Чечулин Андрей!

Неплохо было бы в первую очередь обратиться к MSDN за вопросом;)
Ну да ладно, подскажу. Получить инфо об использовании памяти процессом (как в менеджере задач) можно с помощью стандартной ф-ии GetProcessMemoryInfo().

Описание:
BOOL WINAPI GetProcessMemoryInfo(
HANDLE Process, //Дескриптор нужного нам процесса
PPROCESS_MEMORY_COUNTERS ppsmemCounters, // Указатель на структуру, в которую будет возвращена инфо
DWORD cb //размер передаваемой структуры
);

Вот что нам может рассказать структура:

typedef struct _PROCESS_MEMORY_COUNTERS {
DWORD cb;
DWORD PageFaultCount;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
} PROCESS_MEMORY_COUNTERS, *PPROCESS_MEMORY_COUNTERS;

Из всех полей, вам нужно WorkingSetSize - размер занимаемой процессомпамяти в БАЙТАХ. Описание остальных полей вы легко найдете в MSDN.

Пример функции, возвращающей объем занимаемой памяти текущего процесса в приложении...

P.S. Не забудьте подключить к проекту psapi.h и прилинковать psapi.lib

Успехов!

Приложение:
unsigned long GetAppMemUsage(){ PROCESS_MEMORY_COUNTERS pmc; pmc.cb = sizeof(pmc); GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)); return pmc.WorkingSetSize;}
Форма ответа