【发布时间】:2013-08-19 06:24:34
【问题描述】:
我的 AutoIt 脚本自动执行测试用例。我怀疑有些东西正在泄漏内存。它从 10 MB 开始,当测试用例结束时,它达到大约 40 MB(Task Manager 值)。
我希望我的 AutoIt 脚本在每个测试用例之后报告内存消耗。知道了差异,我可能可以找到原因。
如何使用 AutoIt 脚本检索进程的内存消耗?
【问题讨论】:
标签: windows memory-leaks autoit working-set
我的 AutoIt 脚本自动执行测试用例。我怀疑有些东西正在泄漏内存。它从 10 MB 开始,当测试用例结束时,它达到大约 40 MB(Task Manager 值)。
我希望我的 AutoIt 脚本在每个测试用例之后报告内存消耗。知道了差异,我可能可以找到原因。
如何使用 AutoIt 脚本检索进程的内存消耗?
【问题讨论】:
标签: windows memory-leaks autoit working-set
您正在寻找 WorkingSetSize,它可能与您的任务管理器中列出的值不完全相同。根据它的documentation,工作集是在给定时间物理映射到进程上下文的内存量。
判断方法如下:
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$pid = Run("notepad")
$objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE ProcessId = " & $pid, "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) And $pid <> -1 Then
For $objItem In $colItems
ConsoleWrite("WorkingSetSize: " & $objItem.WorkingSetSize & @CRLF)
Next
Else
ConsoleWrite("No WMI Objects Found for class 'Win32_Process' with ProcessId = " & $pid & @CRLF)
EndIf
您也可以使用此方法从Win32_Process 对象中找出任何other value。
【讨论】:
ExecQuery 来获取简单的 SQL 查询的结果。 2. $pid <> -1 只检查有效的 PID。当您使用Run(...) 函数时,您将获得新创建的应用程序的有效PID,但仅限于可以找到该程序时。所以基本上这就是说:当你没有一个有效的 PID 时,不要对 COM 对象做任何事情 - 否则 $colItems 将无法访问。