找回密码
 加入
搜索
查看: 3526|回复: 9

请教,如何获得某程序占用多少内存

[复制链接]
发表于 2008-11-28 10:26:50 | 显示全部楼层 |阅读模式
如题,如果想获得当前进程中某程序占有多少内存,应该用什么方法
发表于 2008-11-28 10:27:43 | 显示全部楼层
MemGetStats()
 楼主| 发表于 2008-11-28 10:35:23 | 显示全部楼层
补充,例如我的进程中有一个 xx.exe 的进程,我想获取这个进程所占用的内存大小是多少
发表于 2008-11-29 12:09:31 | 显示全部楼层
例如我的进程中有一个 xx.exe 的进程,我想获取这个进程所占用的内存大小是多少
发表于 2009-9-4 10:33:12 | 显示全部楼层
[au3]$objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Process", "WQL", 0X10+0X20)
If IsObj($colItems) Then
        For $objItem In $colItems
                $Name = $objItem.Name;进程名
                $Priority = $objItem.Priority;优先权
                $ProcessId = $objItem.ProcessId;pid
                $ParentProcessId = $objItem.ParentProcessId;父进程pid
                $PeakWorkingSetSize = $objItem.PeakWorkingSetSize;内存
                $ThreadCount = $objItem.ThreadCount;线程数
                $CommandLine = $objItem.CommandLine;进程参数
                $ExecutablePath = $objItem.ExecutablePath;路径
                MsgBox(0, 0, "进程名:" & $Name & @CRLF & "使用内存:"& $PeakWorkingSetSize / 1024 & " K")
        Next
Else
        MsgBox(0, "错误", "无法创建WMI项目")
EndIf[/au3]
发表于 2009-9-4 15:52:28 | 显示全部楼层
正在学API,来个API的,高手纠正下。
#Include <WinAPI.au3>
#Include <array.au3>
$PROCESS_QUERY_INFORMATION=0x400 
$PROCESS_QUERY_LIMITED_INFORMATION=0x1000 
$PROCESS_SET_INFORMATION =0x0200
$PROCESS_SET_QUOTA =0x0100
$PROCESS_SUSPEND_RESUME =0x0800
$PROCESS_TERMINATE =0x0001
$PROCESS_VM_OPERATION =0x0008
$PROCESS_VM_READ =0x10
$PROCESS_VM_WRITE =0x0020;常量
$_PIDN="explorer.exe"
$_PID=ProcessExists($_PIDN)
$_Return=DllCall("Kernel32.dll","hwnd","OpenProcess","dword",0x400+0x10,"int",False,"dword",$_PID)
If Not IsArray($_Return) Or $_Return[0]=0 Then
        MsgBox(0,"error","API错误代码:" & _WinAPI_GetLastError())
        Exit
EndIf
$_Struct=DllStructCreate("DWORD;DWORD;DWORD;DWORD;DWORD;DWORD;DWORD;DWORD;DWORD;DWORD")
$_Return=DllCall("Psapi.dll","int","GetProcessMemoryInfo","hwnd",$_Return[0],"ptr",DllStructGetPtr($_Struct),"dword",DllStructGetSize($_Struct))
MsgBox(0,"","进程:"&$_PIDN & " 占用内存: " & DllStructGetData($_Struct,4)/1024 & " KB")
发表于 2009-9-4 15:52:49 | 显示全部楼层
本帖最后由 bing614 于 2009-9-4 15:54 编辑

用到的API原型
;~ C++ 
;~ BOOL WINAPI GetProcessMemoryInfo(
;~   __in   HANDLE Process,
;~   __out  PPROCESS_MEMORY_COUNTERS ppsmemCounters,
;~   __in   DWORD cb
;~ );
;~ Psapi.dll
;~ http://msdn.microsoft.com/en-us/library/ms683219(VS.85).aspx
;~ C++ 
;~ typedef struct _PROCESS_MEMORY_COUNTERS {
;~   DWORD  cb; 本结构大小 
;~   DWORD  PageFaultCount; 中断次数
;~   SIZE_T PeakWorkingSetSize;  使用内存高峰 
;~   SIZE_T WorkingSetSize; 当前使用的内存
;~   SIZE_T QuotaPeakPagedPoolUsage;使用页面缓存池高峰
;~   SIZE_T QuotaPagedPoolUsage;使用页面缓存池
;~   SIZE_T QuotaPeakNonPagedPoolUsage;使用非分页缓存池高峰
;~   SIZE_T QuotaNonPagedPoolUsage;使用非分页缓存池
;~   SIZE_T PagefileUsage;使用分页文件
;~   SIZE_T PeakPagefileUsage;使用分页文件的高峰
;~ }PROCESS_MEMORY_COUNTERS, *PPROCESS_MEMORY_COUNTERS;
;~ DWORD;DWORD;DWORD;DWORD;DWORD;DWORD;DWORD;DWORD;DWORD;DWORD
;~ C++ 
;~ HANDLE WINAPI OpenProcess(
;~   __in  DWORD dwDesiredAccess,
;~   __in  BOOL bInheritHandle,
;~   __in  DWORD dwProcessId
;~ );
;~ Kernel32.dll
;~ http://msdn.microsoft.com/en-us/library/ms684320(VS.85).aspx
发表于 2009-12-2 09:12:38 | 显示全部楼层
$nc=ProcessGetStats("360se.exe",0)
MsgBox(0,"",$nc[0]) ;得到内存占用(单位/字节B)
发表于 2010-4-11 07:51:55 | 显示全部楼层
知道这用吗????
发表于 2010-4-11 12:14:27 | 显示全部楼层
#Include <WinAPIEx.au3>
_WinAPI_GetProcessMemoryInfo
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 16:41 , Processed in 0.078136 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表