systemutil.CloseProcessByName的工作原理
哪位知道systemutil.CloseProcessByName的工作原理的? 脚本用大量的这个方法是不是不好 是不是对内存的使用会有影响? 如 systemutil.CloseProcessByName "iexplore.exe"在任务管理起直接关闭进程.
脚本用大量的这个方法是不是不好 ?这是什么意思 没看懂
我想
CloseProcessByName应该是用CreateToolhelp32Snapshot依次获取到所有进程,在每次移动到next进程之前比较szExeFile的值是否为iexplore.exe,如果是则TerminateProcess。 是这样的 我现在在脚本里大量用了这个方法 但是实际效果是 经常弹出内存地址的错误提示但是也不影响脚本的运行 每次报了错 它又自动把错误提示关了 手动在任务管理器里关掉进程又不会出现这个错误 很无赖.. CreateToolhelp32Snapshot这个API在不断枚举的过程中,会引发页面错误,需要从硬盘上读取到物理内存中,需要操作系统重新分配物理内存。
因而,多次使用它会频繁访问磁盘,系统变慢。你可以在任务管理器中查看内存使用。 原帖由 wshyzhywx 于 2008-11-7 20:29 发表 http://bbs.51testing.com/images/common/back.gif
是这样的 我现在在脚本里大量用了这个方法 但是实际效果是 经常弹出内存地址的错误提示但是也不影响脚本的运行 每次报了错 它又自动把错误提示关了 手动在任务管理器里关掉进程又不会出现这个错误 很无赖..
仅仅是调用CloseProcessByName关闭IE浏览器进程,应该没有问题吧。无论实现机制如何,QTP也不可能跳过Windows操作系统这个级别。
至于“内存地址错误”,可以考虑一下是不是有如下情况:
1)关闭浏览器时,浏览器中的页面还在加载。这种情况下,手工关闭进程也可能出现异常;
2)两次调用之间间隔太短,QTP帮助中对该方法有这样的注释:
Note: QuickTest initially tries to close the process by sending a WM_CLOSE message to the process window. If the process is still open after 5 seconds, QuickTest terminates the process.
5秒间隔内调用两次相同方法,也许会有问题。
我现在的Case在两种情况下使用这个方法:
a)出现非预期异常的时候,关闭进程并退出当前Case;
b)在每个Case的起始(或者结束)时,清理当前运行环境;
在一个Case当中,如果脚本可以正常运行还是使用Browser.Close方法好些。
回复 6# 的帖子
我不是在关浏览器时出现的问题 是关闭应用程序时出现的问题回复 7# 的帖子
你会抓dump吗?(装windbg)把其中一个出错的mini dump抓上来,然后运行:
Analyze -v
把结果贴上来。
页:
[1]