通过系统API或读取/proc/meminfo获取内存数据,支持多平台实时监控,适用于性能优化与资源管理
API 获取内存信息详解
操作系统内存 API
不同操作系统提供了不同的 API 或接口用于获取内存信息,以下是主流操作系统的解决方案:

| 操作系统 | API/接口 | |
|---|---|---|
| Windows | GlobalMemoryStatusEx | 总内存、可用内存、缓存、进程数等 |
| Linux | /proc/meminfo 文件 | MemTotal、MemAvailable、Buffers、Cache |
| macOS | sysctl 系统调用 | 物理内存、页交换信息、压缩内存统计 |
| 跨平台方案 | psutil(Python 库) | 统一接口获取多平台内存、磁盘、CPU 信息 |
Windows 系统内存获取
使用 GlobalMemoryStatusEx API
- 函数声明:
BOOL GlobalMemoryStatusEx(LPMEMORYSTATUSEX lpBuffer);
- 数据结构:
typedef struct { DWORD dwLength; DWORD dwMemoryLoad; DWORDLONGullTotalPhys; DWORDLONGullAvailPhys; DWORDLONGullTotalPageFile; DWORDLONGullAvailPageFile; DWORDLONGullTotalVirtual; DWORDLONGullAvailVirtual; DWORDLONGullAvailExtendedVirtual; } MEMORYSTATUSEX, *LPMEMORYSTATUSEX; - 关键指标:
ullTotalPhys:物理内存总量(字节)ullAvailPhys:可用物理内存(字节)dwMemoryLoad:内存使用率(百分比)
C# 示例代码
using System;
using System.Diagnostics;
class MemoryInfo
{
static void Main()
{
MEMORYSTATUSEX memStatus = new MEMORYSTATUSEX();
memStatus.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
if (GlobalMemoryStatusEx(ref memStatus))
{
Console.WriteLine($"总内存: {memStatus.ullTotalPhys / (1024 * 1024)} MB");
Console.WriteLine($"可用内存: {memStatus.ullAvailPhys / (1024 * 1024)} MB");
Console.WriteLine($"内存使用率: {memStatus.dwMemoryLoad}%");
}
}
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);
} Linux 系统内存获取
解析 /proc/meminfo
文件路径:
/proc/meminfo关键字段:
MemTotal: 16384256 kB MemAvailable: 10234567 kB Buffers: 204800 kB Cached: 819200 kB
Python 解析示例:

def get_linux_memory(): with open("/proc/meminfo") as f: data = {} for line in f: key, value = line.split(":", 1) data[key.strip()] = int(value.strip().split()[0]) # 提取数值(KB) return data mem_info = get_linux_memory() print(f"总内存: {mem_info['MemTotal'] / 1024} MB") print(f"可用内存: {mem_info['MemAvailable'] / 1024} MB")
跨平台方案(Python + psutil)
安装依赖
pip install psutil
示例代码
import psutil
memory = psutil.virtual_memory()
print(f"总内存: {memory.total / (1024 ** 3):.2f} GB")
print(f"可用内存: {memory.available / (1024 ** 3):.2f} GB")
print(f"内存使用率: {memory.percent}%") 常见问题与解答
问题 1:如何实现跨平台内存监控?
解答:
推荐使用 psutil(Python)或 System.Management(C#)等跨平台库。
- Python:
psutil.virtual_memory()自动适配 Windows/Linux/macOS。 - C#:通过
System.Management查询 WMI 对象(如Win32_OperatingSystem)。
问题 2:如何实时监控内存变化?
解答:
- 定时轮询:设置固定时间间隔(如每秒)调用 API 刷新数据。
- 事件驱动:在 Linux 中监听
/proc/meminfo文件变化(需内核支持)。 - 第三方工具:使用 Prometheus + Node Exporter 采集内存指标并
以上内容就是解答有关“api 获取内存”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复