Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как програмно узнать сколько занимает памяти чужое приложение? [D6, Win95/98, WinME]


kirya85 ©   (2002-01-17 22:29:00) 

Как програмно узнать сколько занимает памяти чужое приложение? Желательно физичиской и виртуальной памяти отдельно.


VuDZ   (2002-01-28 08:39:00) [1]

для нежелающих искать - http://delphi.xonix.ru/faq/system/memory01.shtml- пример на делфи


VuDZ   (2002-01-27 19:19:00) [2]

тебе прислать исходник или exe?
исходник - полностью на С++ +MFC
возьми любой depence viewer и посмотри, что использует task manager - там сылки на toolhelp нет в принципе.
А то что у кого то не получается - проблема его рук и нежелание читать MSDN и искать в инете


cdaDmitriy   (2002-01-27 10:23:00) [3]

>> VuDZ
сделай тест чтобы твоя прога и таскменедер давали одинаковое значение


VuDZ   (2002-01-27 10:07:00) [4]

люди, вы знаете о такой весчи як МСДН?
GetProcessMemoryInfo
The GetProcessMemoryInfo function retrieves information about the memory usage of the specified process in the PROCESS_MEMORY_COUNTERS structure.

BOOL GetProcessMemoryInfo(
HANDLE Process, // handle to process
PPROCESS_MEMORY_COUNTERS ppsmemCounters, // buffer
DWORD cb // size of buffer
);
Parameters
Process
[in] Handle to the process.
ppsmemCounters
[out] Pointer to the PROCESS_MEMORY_COUNTERS structure that receives information about the memory usage of the process.
cb
[in] Specifies the size, in bytes, of the PROCESS_MEMORY_COUNTERS structure.

The PROCESS_MEMORY_COUNTERS structure contains the memory statistics for a process.

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;
typedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS;
Members
cb
The size of the structure, in bytes.
PageFaultCount
The number of page faults.
PeakWorkingSetSize
The peak working set size.
WorkingSetSize
The current working set size.
QuotaPeakPagedPoolUsage
The peak paged pool usage.
QuotaPagedPoolUsage
The current paged pool usage.
QuotaPeakNonPagedPoolUsage
The peak nonpaged pool usage.
QuotaNonPagedPoolUsage
The current nonpaged pool usage.
PagefileUsage
The current pagefile usage.
PeakPagefileUsage
The peak pagefile usage.

toolhelp, toolhelp... проще надо быть...


cdaDmitriy   (2002-01-27 10:00:00) [5]

>> Philip
извини не понял ( проверил твой код ) и не понял
какую величину возвращает OccupiedSpace
в тесте OccupiedSpace= 24,145к
в таскменедере ()= 1,782к
если можеш обьясни .


Philip   (2002-01-25 18:06:00) [6]

Сорри, забыл про строчку :)
Offset := Offset + Buf.RegionSize
воткни ее после VirtualQueryEx


Philip   (2002-01-25 00:17:00) [7]

Я в одной из своих программ пользовался следующим приемом для определения общего объема задействованной памяти:

var
Offset : Cardinal;
Buf : _MEMORY_BASIC_INFORMATION;
OccupiedSpace : LongInt;
begin
OccupiedSpace := 7FFFFFFF
Offset := 0;
while Offset < $7FFFFFFF do
begin
VirtualQueryEx(ProcessHandle, Ptr(Offset), Buf, SizeOf Buf));

if Buf.State = MEM_FREE then
OccupiedSpace := OccupiedSpace - Buf.RegionSize;
end;
end;


Rem   (2002-01-24 14:08:00) [8]

Рядом ведь лежит:

Heap32First(..THEAPENTRY32..);
Heap32Next(..THEAPENTRY32..);

THEAPENTRY32 = record
dwSize: DWORD;
hHandle: THandle; // Handle of this heap block
dwAddress: DWORD; // Linear address of start of block
dwBlockSize: DWORD; // Size of block in bytes
dwFlags: DWORD;
dwLockCount: DWORD;
dwResvd: DWORD;
th32ProcessID: DWORD; // owning process
th32HeapID: DWORD; // heap block is in
end;


cdaDmitriy   (2002-01-24 12:56:00) [9]

?????????????????


cdaDmitriy   (2002-01-22 19:18:00) [10]

НЕУЖЕЛИ НИКТО НЕЗНАЕТ?!!!???


cdaDmitriy   (2002-01-22 14:40:00) [11]

>> REM

Copies memory allocated to another process into an application-supplied buffer.

BOOL WINAPI Toolhelp32ReadProcessMemory(DWORD th32ProcessID,
LPCVOID lpBaseAddress, LPVOID lpBuffer, DWORD cbRead,
LPDWORD lpNumberOfBytesRead);

-- и это ответ ???


Rem   (2002-01-21 12:58:00) [12]

В модуле TlHelp32:
functionToolhelp32ReadProcessMemory(th32ProcessID: DWORD; lpBaseAddress: Pointer; var lpBuffer; cbRead: DWORD; varlpNumberOfBytesRead: DWORD): BOOL stdcall;


kirya85   (2002-01-21 00:12:00) [13]

НЕУЖЕЛИ НИКТО НЕЗНАЕТ?!!!???


Наверх

Титульная страница Поиск, карта сайта Написать письмо