56 lines
1.2 KiB
ObjectPascal
56 lines
1.2 KiB
ObjectPascal
unit MemInfo;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows;
|
|
|
|
type
|
|
PROCESS_MEMORY_COUNTERS_EX = packed record
|
|
cb: DWORD;
|
|
PageFaultCount: DWORD;
|
|
PeakWorkingSetSize: DWORD;
|
|
WorkingSetSize: DWORD;
|
|
QuotaPeakPagedPoolUsage: DWORD;
|
|
QuotaPagedPoolUsage: DWORD;
|
|
QuotaPeakNonPagedPoolUsage: DWORD;
|
|
QuotaNonPagedPoolUsage: DWORD;
|
|
PageFileUsage: DWORD;
|
|
PeakPageFileUsage: DWORD;
|
|
PrivateUsage: DWORD;
|
|
end;
|
|
|
|
TGetProcessMemoryInfo = function (Process: THandle; out Counters; cb: DWORD): BOOL stdcall;
|
|
|
|
function GetPrivateMemoryUsage: DWORD;
|
|
function GetMemInfo: PROCESS_MEMORY_COUNTERS_EX;
|
|
|
|
implementation
|
|
|
|
var
|
|
hPSAPI: THandle;
|
|
_GetProcessMemoryInfo: TGetProcessMemoryInfo;
|
|
|
|
function GetProcessMemoryInfo(Process: THandle; out Counters; cb: DWORD): BOOL;
|
|
begin
|
|
Result := _GetProcessMemoryInfo(Process, Counters, cb)
|
|
end;
|
|
|
|
function GetMemInfo: PROCESS_MEMORY_COUNTERS_EX;
|
|
begin
|
|
Assert(GetProcessMemoryInfo(GetCurrentProcess, Result, SizeOf(Result)))
|
|
end;
|
|
|
|
function GetPrivateMemoryUsage: DWORD;
|
|
begin
|
|
Result := GetMemInfo.PrivateUsage
|
|
end;
|
|
|
|
initialization
|
|
|
|
hPSAPI := LoadLibrary('PSAPI.dll');
|
|
Assert(hPSAPI >= 32);
|
|
@_GetProcessMemoryInfo := GetProcAddress(hPSAPI, 'GetProcessMemoryInfo');
|
|
|
|
end.
|