tasklist 中获取某进程的内存占用为什么和任务管理器中的不一样?
大家好:我想使用autoit监控单一进程的内存使用率,但是一直没有找到好的解决方法。于是想到了用tasklist这种方式,但是发现 tasklist返回的内存使用率和任务管理器中的不一致? 在网上也找不到答案,请大侠帮我解惑,不甚感激!!
这是一个notepad.exe例子,我也没有找到换算关系..
请大家帮忙看看 怎么 没人 回答?
哎。。。。。。。。。。 我这测试是一样的 好像是内存占用和虚拟内存占用的总和 回复 3# MicroBlue
Still Thanks 阿凡........ 回复 4# afan
afan, 我想监控一个程序的 内存使用率,想用 API 去做,但是对API 不熟悉。 afan 给个链接,或给个明路呗...........我已经搜索过论坛了,没有找到好的方法啊。 回复 4# afan
thanks, 为何还有虚拟内存啊? 回复afan
afan, 我想监控一个程序的 内存使用率,想用 API 去做,但是对API 不熟悉。 afan 给个 ...
MicroBlue 发表于 2012-2-27 09:03 http://www.autoitx.com/images/common/back.gif#include <WinAPIEx.au3>
#include <Array.au3>
Local $aPidL = ProcessList()
If @error Then Exit
For $i = 1 To $aPidL
$aPidL[$i] = _GetProcessMemory($aPidL[$i])
Next
_ArrayDisplay($aPidL, '进程内存占用')
Func _GetProcessMemory($iPid, $NFormat = 1)
;afan提示:默认返回以千位逗号分割的内存占用KB值;$NFormat 参数为0则返回字节数
Local $Data = _WinAPI_GetProcessMemoryInfo($iPid)
If Not IsArray($Data) Then Return SetError(1, '', '')
If Not $NFormat Then Return $Data
Return StringRegExpReplace($Data / 1024, '(\d+?)(?=(?:\d{3})+\Z)', '$1,') & ' (K)'
EndFunc ;==>_GetProcessMemory 回复 9# afan
Thanksa lot .
afan 发表于 2012-2-27 10:07 http://www.autoitx.com/images/common/back.gif
大大啊~~为毛 我这边
_GetProcessMemory 是Return SetError(1, '', '')
求帮助啊! 回复 11# jasmine
查看 _WinAPI_GetProcessMemoryInfo() 找原因; #FUNCTION# ====================================================================================================================
; Name...........: _WinAPI_GetProcessMemoryInfo
; Description....: Retrieves information about the memory usage of the specified process.
; Syntax.........: _WinAPI_GetProcessMemoryInfo ( [$PID] )
; Parameters.....: $PID - The PID of the process. Default (0) is the current process.
; Return values..: Success - The array that contains the following information.
;
; - The number of page faults.
; - The peak working set size, in bytes.
; - The current working set size, in bytes.
; - The peak paged pool usage, in bytes.
; - The current paged pool usage, in bytes.
; - The peak nonpaged pool usage, in bytes.
; - The current nonpaged pool usage, in bytes.
; - The current space allocated for the pagefile, in bytes.
; - The peak space allocated for the pagefile, in bytes.
; - The current amount of memory that cannot be shared with other processes, in bytes.
;
; Failure - 0 and sets the @error flag to non-zero.
; Author.........: Yashied
; Modified.......:
; Remarks........: None
; Related........:
; Link...........: @@MsdnLink@@ GetProcessMemoryInfo
; Example........: Yes
; ===============================================================================================================================
Func _WinAPI_GetProcessMemoryInfo($PID = 0)
If Not $PID Then
$PID = _WinAPI_GetCurrentProcessID()
If Not $PID Then
Return SetError(1, 0, 0)
EndIf
EndIf
Local $hProcess = DllCall('kernel32.dll', 'ptr', 'OpenProcess', 'dword', 0x00000410, 'int', 0, 'dword', $PID)
If (@error) Or (Not $hProcess) Then
Return SetError(1, 0, 0)
EndIf
Local $tPMC_EX = DllStructCreate('dword;dword;ulong_ptr;ulong_ptr;ulong_ptr;ulong_ptr;ulong_ptr;ulong_ptr;ulong_ptr;ulong_ptr;ulong_ptr')
Local $Ret = DllCall(@SystemDir & '\psapi.dll', 'int', 'GetProcessMemoryInfo', 'ptr', $hProcess, 'ptr', DllStructGetPtr($tPMC_EX), 'int', DllStructGetSize($tPMC_EX))
If (@error) Or (Not $Ret) Then
$Ret = 0
EndIf
_WinAPI_CloseHandle($hProcess)
If Not IsArray($Ret) Then
Return SetError(1, 0, 0)
EndIf
Local $Result
For $i = 0 To 9
$Result[$i] = DllStructGetData($tPMC_EX, $i + 2)
Next
Return $Result
EndFunc ;==>_WinAPI_GetProcessMemoryInfo 本帖最后由 jasmine 于 2013-4-11 16:26 编辑
回复 12# afan
Local $hProcess = DllCall('kernel32.dll', 'ptr', 'OpenProcess', 'dword', 0x00000410, 'int', 0, 'dword', $PID)
If (@error) Or (Not $hProcess) Then
Return SetError(1, 0, 0)
EndIf
这里 @error 为0
$hProcess 为0 求大大 帮助{:face (319):} 受教了。不错记号。一下。
页:
[1]
2