AHK WinWait 内存使用
AHK WinWait Memory Usage
我有一个 ahk 脚本,用于在 Crystal 报告对话框中启用 Printer
按钮,无论出于何种原因,在 Server 2008 R2 中使用时默认情况下都不会启用该按钮。无论如何...我遇到的问题是 运行ning 在每个周期继续堆叠内存的过程。它不像我将任何内容存储到恰好未被清除的变量中。在此过程中有什么使用了未释放的内存资源,我可以实施什么来防止这种情况发生?
您可以在此清单中看到,私有内存随着使用量的增加而增长。我最终让它启动了大约 5 次,它从大约 1000k 变成了 2000k。
顶部条目是我从 WinWaitActive
转换而来的测试版本,它导致不必要的 CPU 使用。
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
58 8 2312 6216 68 0.62 7828 showprinterbutton
55 8 1788 5508 67 32.39 6840 ShowPSPrinter
57 8 1864 6028 79 33.12 7184 ShowPSPrinter
55 8 1396 5084 67 1.29 7604 ShowPSPrinter
55 8 1796 5536 67 36.36 7856 ShowPSPrinter
55 8 1772 5444 67 37.27 9848 ShowPSPrinter
55 8 1740 5424 67 26.33 10300 ShowPSPrinter
55 8 1396 4992 67 0.84 11348 ShowPSPrinter
55 8 1396 5024 67 1.14 11460 ShowPSPrinter
55 8 1736 5604 67 355.93 11676 ShowPSPrinter
55 8 1396 4984 67 1.06 13364 ShowPSPrinter
55 8 1396 5132 67 0.81 13516 ShowPSPrinter
72 9 2048 6500 73 66.36 14072 ShowPSPrinter
55 8 1792 5504 67 59.92 15736 ShowPSPrinter
55 8 1400 4960 67 0.61 16340 ShowPSPrinter
57 8 1496 5848 79 0.98 18516 ShowPSPrinter
57 8 1500 5404 79 0.98 19048 ShowPSPrinter
55 8 1400 5000 67 0.51 22020 ShowPSPrinter
这是我的脚本内容,然后将其编译为 运行 作为 EXE。
; Version: 1.2
; Dated: 03/31/2015 - Created
; Description: Enable a watch for page setup dialog and activate the print button for crystal reports
; Only allow one instance to run
#SingleInstance force
; Run with out a tray icon
#NoTrayIcon
; Getting loose with not requiring direct title menu values
SetTitleMatchMode, RegEx
; Start active watch for quick post menu
WaitForPS:
WinWait,Page Setup
{
Control,Show,,Button8,Page Setup,(optimize for screen display)
GoSub WaitForPS
}
; End of Script...
在 window 出现并且循环 运行 一次之后,WainWait
立即继续下一条语句,因为 window 已经存在,启用控制,并再次递归调用循环 (gosub
),因此代码每秒分配 100 个堆栈帧,最终耗尽调用堆栈。
改为使用 indefinite loop 并在继续之前等待 window 关闭:
Loop
{
WinWait,Page Setup
Control,Show,,Button8,Page Setup,(optimize for screen display)
WinWaitClose
}
我有一个 ahk 脚本,用于在 Crystal 报告对话框中启用 Printer
按钮,无论出于何种原因,在 Server 2008 R2 中使用时默认情况下都不会启用该按钮。无论如何...我遇到的问题是 运行ning 在每个周期继续堆叠内存的过程。它不像我将任何内容存储到恰好未被清除的变量中。在此过程中有什么使用了未释放的内存资源,我可以实施什么来防止这种情况发生?
您可以在此清单中看到,私有内存随着使用量的增加而增长。我最终让它启动了大约 5 次,它从大约 1000k 变成了 2000k。
顶部条目是我从 WinWaitActive
转换而来的测试版本,它导致不必要的 CPU 使用。
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
58 8 2312 6216 68 0.62 7828 showprinterbutton
55 8 1788 5508 67 32.39 6840 ShowPSPrinter
57 8 1864 6028 79 33.12 7184 ShowPSPrinter
55 8 1396 5084 67 1.29 7604 ShowPSPrinter
55 8 1796 5536 67 36.36 7856 ShowPSPrinter
55 8 1772 5444 67 37.27 9848 ShowPSPrinter
55 8 1740 5424 67 26.33 10300 ShowPSPrinter
55 8 1396 4992 67 0.84 11348 ShowPSPrinter
55 8 1396 5024 67 1.14 11460 ShowPSPrinter
55 8 1736 5604 67 355.93 11676 ShowPSPrinter
55 8 1396 4984 67 1.06 13364 ShowPSPrinter
55 8 1396 5132 67 0.81 13516 ShowPSPrinter
72 9 2048 6500 73 66.36 14072 ShowPSPrinter
55 8 1792 5504 67 59.92 15736 ShowPSPrinter
55 8 1400 4960 67 0.61 16340 ShowPSPrinter
57 8 1496 5848 79 0.98 18516 ShowPSPrinter
57 8 1500 5404 79 0.98 19048 ShowPSPrinter
55 8 1400 5000 67 0.51 22020 ShowPSPrinter
这是我的脚本内容,然后将其编译为 运行 作为 EXE。
; Version: 1.2
; Dated: 03/31/2015 - Created
; Description: Enable a watch for page setup dialog and activate the print button for crystal reports
; Only allow one instance to run
#SingleInstance force
; Run with out a tray icon
#NoTrayIcon
; Getting loose with not requiring direct title menu values
SetTitleMatchMode, RegEx
; Start active watch for quick post menu
WaitForPS:
WinWait,Page Setup
{
Control,Show,,Button8,Page Setup,(optimize for screen display)
GoSub WaitForPS
}
; End of Script...
在 window 出现并且循环 运行 一次之后,WainWait
立即继续下一条语句,因为 window 已经存在,启用控制,并再次递归调用循环 (gosub
),因此代码每秒分配 100 个堆栈帧,最终耗尽调用堆栈。
改为使用 indefinite loop 并在继续之前等待 window 关闭:
Loop
{
WinWait,Page Setup
Control,Show,,Button8,Page Setup,(optimize for screen display)
WinWaitClose
}