我使用一个代码库,其中包含一个计算可用内存量的函数。
对于托管 PC(由 Windows 2008 R2 x64 托管),我有时会看到以一种有趣的方式计算的免费金额。
它被报告为
物理内存:1400/1400 MB(可用/总)
这不可能是真的,因为有几个应用程序正在运行。怎么会这样?
我感兴趣的是这种现象是否指向内存问题。有时我的应用程序在内存有限(如 1400 MB)的 VM 上运行时内存不足。所以当我看到一个错误报告可用内存错误地报告为 1400 MB 时,它真的是零吗?
这是代码
function GetMemoryStatus : UnicodeString;
type
TMemoryStatusEx = record
dwLength : dword;
dwMemoryLoad : dword;
ullTotalPhys : int64;
ullAvailPhys : int64;
ullTotalPageFile : int64;
ullAvailPageFile : int64;
ullTotalVirtual : int64;
ullAvailVirtual : int64;
ullAvailExtendedVirtual : int64;
end;
var gmse : function (var mse: TMemoryStatusEx) : bool; stdcall;
ms : TMemoryStatus;
mse : TMemoryStatusEx;
begin
gmse := GetProcAddress(GetModuleHandle(kernel32), 'GlobalMemoryStatusEx');
if @gmse <> nil then begin
mse.dwLength := sizeOf(mse);
gmse(mse);
end else begin
ms.dwLength := sizeOf(ms);
GlobalMemoryStatus(ms);
mse.ullAvailPhys := ms.dwAvailPhys;
mse.ullTotalPhys := ms.dwTotalPhys;
end;
result := IntToStrExW((mse.ullAvailPhys + $80000) div $100000) + '/' +
IntToStrExW((mse.ullTotalPhys + $80000) div $100000) + ' MB (free/total)';
end;
谢谢!雅各布