我有一个用VB6编写的程序,我希望它能够知道自身正在使用多少内存。
在谷歌上搜索了一下,只找到了“GlobalMemoryStatusEx”Windows API函数,但这似乎不是我要找的:它可以用于提供关于计算机整体内存的信息,而我想要的是关于当前进程本身的信息。
有什么想法吗?谢谢。
我有一个用VB6编写的程序,我希望它能够知道自身正在使用多少内存。
在谷歌上搜索了一下,只找到了“GlobalMemoryStatusEx”Windows API函数,但这似乎不是我要找的:它可以用于提供关于计算机整体内存的信息,而我想要的是关于当前进程本身的信息。
有什么想法吗?谢谢。
GetProcessMemoryInfo()
函数:Public Type PROCESS_MEMORY_COUNTERS
cb As Long
PageFaultCount As Long
PeakWorkingSetSize As Long
WorkingSetSize As Long
QuotaPeakPagedPoolUsage As Long
QuotaPagedPoolUsage As Long
QuotaPeakNonPagedPoolUsage As Long
QuotaNonPagedPoolUsage As Long
PagefileUsage As Long
PeakPagefileUsage As Long
End Type
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
Public Declare Function GetCurrentProcess Lib "kernel32" () As Long
Public Declare Function GetProcessMemoryInfo Lib "PSAPI.DLL" (ByVal hProcess As Long, ppsmemCounters As PROCESS_MEMORY_COUNTERS, ByVal cb As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
调用代码:
Dim tPMC As PROCESS_MEMORY_COUNTERS
'ProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessID)
ProcessHandle = GetCurrentProcess()
If (GetProcessMemoryInfo(ProcessHandle, tPMC, Len(tPMC)) <> 0) Then
PageFaultCount = Format(tPMC.PageFaultCount, "#,###")
WorkingSetSize = FormatFileSize(tPMC.WorkingSetSize)
PageFileUsage = FormatFileSize(tPMC.PagefileUsage)
End If
CloseHandle ProcessHandle