Как посмотреть информацию о виртуальной памяти?
Правильно смотрю информацию о виртуальной памяти ?
Status.dwLength := sizeof(TMemoryStatusEx);
GlobalMemoryStatusEx(Status);
AddToLog('Memory ' + IntToStr(Status.dwMemoryLoad) + '%');
AddToLog('Общий объём виртуальной памяти ' + IntToStr(Status.ullTotalVirtual div 1024417) + 'МБ');
AddToLog('Количество свободной виртуальной памяти ' + IntToStr(Status.ullAvailVirtual div 1024417) + 'МБ');
Ответы (2 шт):
Автор решения: Alex R.
→ Ссылка
Вот код популярного ответа с enSO, использующий GlobalMemoryStatusEx. Можно сравнить результаты. Я вижу у вас не происходит обнуление структуры FillChar(MemStatus, SizeOf(MemStatus), 0);.
program Project1;
{$APPTYPE CONSOLE}
uses
Windows,
Classes,
SysUtils;
type
DWORDLONG = UInt64;
PMemoryStatusEx = ^TMemoryStatusEx;
TMemoryStatusEx = packed record
dwLength: DWORD;
dwMemoryLoad: DWORD;
ullTotalPhys: DWORDLONG;
ullAvailPhys: DWORDLONG;
ullTotalPageFile: DWORDLONG;
ullAvailPageFile: DWORDLONG;
ullTotalVirtual: DWORDLONG;
ullAvailVirtual: DWORDLONG;
ullAvailExtendedVirtual: DWORDLONG;
end;
function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): BOOL; stdcall; external kernel32;
procedure Main;
var
MemStatus: TMemoryStatusEx;
begin
// initialize the structure
FillChar(MemStatus, SizeOf(MemStatus), 0);
MemStatus.dwLength := SizeOf(MemStatus);
// check return code for errors
Win32Check(GlobalMemoryStatusEx(MemStatus));
Writeln(Format('dwLength: %d', [MemStatus.dwLength]));
Writeln(Format('dwMemoryLoad: %d', [MemStatus.dwMemoryLoad]));
Writeln(Format('ullTotalPhys: %d', [MemStatus.ullTotalPhys]));
Writeln(Format('ullAvailPhys: %d', [MemStatus.ullAvailPhys]));
Writeln(Format('ullTotalPageFile: %d', [MemStatus.ullTotalPageFile]));
Writeln(Format('ullAvailPageFile: %d', [MemStatus.ullAvailPageFile]));
Writeln(Format('ullTotalVirtual: %d', [MemStatus.ullTotalVirtual]));
Writeln(Format('ullAvailVirtual: %d', [MemStatus.ullAvailVirtual]));
Writeln(Format('ullAvailExtendedVirtual: %d', [MemStatus.ullAvailExtendedVirtual]));
end;
begin
try
Main;
except
on E: Exception do
begin
ExitCode := 1;
Writeln(Format('[%s] %s', [E.ClassName, E.Message]));
end;
end;
end.
Автор решения: Человек
→ Ссылка
Если кому нужно то сделал вот так
var
Status: TMemoryStatusEx;
begin
FillChar(Status, SizeOf(Status), 0);
Status.dwLength := sizeof(TMemoryStatusEx);
Win32Check(GlobalMemoryStatusEx(Status));
Тут идет запись в лог
AddToLog('Количество оставшейся физической памяти при ' + IntToStr(Status.ullAvailPhys div 1024417) + 'МБ' + #13);
AddToLog('Количество свободной виртуальной памяти при ' + IntToStr(Status.ullAvailVirtual div 1024417) + 'МБ' + #13);