【问题标题】:Available and Total RAM always the same可用和总 RAM 始终相同
【发布时间】:2015-01-29 10:40:54
【问题描述】:

所以我正在尝试通过 python 获取我的 PC 的可用 RAM 和总 RAM。这就是我现在所拥有的:

def get_memory_status():
    kernel32 = ctypes.windll.kernel32
    c_ulong = ctypes.c_ulong
    class MEMORYSTATUS(ctypes.Structure):
        _fields_ = [
            ("dwLength", c_ulong),
            ("dwMemoryLoad", c_ulong),
            ("dwTotalPhys", c_ulong),
            ("dwAvailPhys", c_ulong),
            ("dwTotalPageFile", c_ulong),
            ("dwAvailPageFile", c_ulong),
            ("dwTotalVirtual", c_ulong),
            ("dwAvailVirtual", c_ulong)
        ]
    memoryStatus = MEMORYSTATUS()
    memoryStatus.dwLength = ctypes.sizeof(MEMORYSTATUS)
    kernel32.GlobalMemoryStatus(ctypes.byref(memoryStatus))

    return (memoryStatus.dwAvailPhys, memoryStatus.dwTotalPhys)

avail, total = get_memory_status()
print avail + " " + total

如果我执行此操作,我总是会得到相同的可用 RAM 和总 RAM 值。当我要求dwMemoryLoad 时,我得到的值与 Window 的任务管理器中显示的值相同,即“物理内存”是已用 RAM 的百分比(不是 0)。但我想要精确的字节数。难道我做错了什么?

我不能使用任何额外的库,如果可以的话,我早就这样做了。

【问题讨论】:

    标签: python windows memory ctypes ram


    【解决方案1】:

    根据GlobalMemoryStatus MSDN entry的说明:

    在内存大于 2 GB 且小于 4 GB 的 Intel x86 计算机上,GlobalMemoryStatus 函数将始终在 MEMORYSTATUS 结构的 dwTotalPhys 成员中返回 2 GB。同样,如果总可用内存在 2 到 4 GB 之间,则 MEMORYSTATUS 结构的 dwAvailPhys 成员将向下舍入为 2 GB。如果使用 /LARGEADDRESSAWARE 链接器选项链接可执行文件,则 GlobalMemoryStatus 函数将在两个成员中返回正确的物理内存量。

    而且,在文章的顶部,有:

    [GlobalMemoryStatus 可能返回不正确的信息。请改用GlobalMemoryStatusEx 函数。]

    顺便说一句,这个函数存在于pywin32 库中。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2019-10-09
    • 2018-08-07
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多