我正在尝试使用 ctypes 在 python 中获取总/可用虚拟内存,但它似乎返回了一个非常不正确的值。下面是我目前拥有的代码
import ctypes
import ctypes.wintypes as wintypes
def _get_virtual_size():
class MEMORYSTATUSEX(ctypes.Structure):
_fields_ = [("dwLength", wintypes.DWORD),
("dwMemoryLoad", wintypes.DWORD),
("ullTotalPhys", ctypes.c_uint64),
("ullAvailPhys", ctypes.c_uint64),
("ullTotalPageFile", ctypes.c_uint64),
("ullAvailPageFile", ctypes.c_uint64),
("ullTotalVirtual", ctypes.c_uint64),
("ullAvailVirtual", ctypes.c_uint64),
("ullAvailExtendedVirtual", ctypes.c_uint64)]
def __init__(self):
ctypes.Structure.__init__(self)
self.dwLength = ctypes.sizeof(self)
kernel32 = ctypes.WinDLL("kernel32", use_last_error=True)
GlobalMemoryStatusEx = kernel32.GlobalMemoryStatusEx
GlobalMemoryStatusEx.restype = wintypes.BOOL
GlobalMemoryStatusEx.argtypes = [ctypes.POINTER(MEMORYSTATUSEX)]
status = MEMORYSTATUSEX()
if GlobalMemoryStatusEx(status):
return {'totalPage':status.ullAvailPageFile, 'total':status.ullTotalVirtual, 'available':status.ullAvailVirtual}
return None
print _get_virtual_size()
结果:{'available':140737380003840L,'totalPage':13305126912L,'total':140737488224256L}
注意:使用 psutil 的值似乎报告正确,但需要不使用 psutil 的解决方案。
import psutil
print psutil.virtual_memory()
结果:svmem(总计=17114841088L,可用=13436207104L,百分比=21.5,使用=3678633984L,空闲=13436207104L)
如何使用 ctypes 方法获得 psutil 报告的相同值。我目前在 Windows 8.1 上的 Python 2.7.10 64Bit 中运行上述代码
任何帮助,将不胜感激。