2015-08-07 1 views
1

У меня есть сценарий ahk, который я использую для включения кнопки Printer в диалоговом окне Crystal Reports, который по какой-либо причине не включен по умолчанию при использовании в Server 2008 R2. В любом случае ... проблема, с которой я столкнулась, заключается в том, что при запуске продолжается стек памяти каждого цикла. Это не похоже на то, что я сохраняю любое содержимое переменной, которая, случается, не очищается. Что в этом процессе использует ресурсы памяти, которые не освобождаются, и есть ли что-нибудь, что я могу реализовать, чтобы это не происходило?AHK WinWait Использование памяти

В этом листинге вы можете увидеть, что частная память растет только по мере использования. Я закончил тем, что он начал около 5 раз, и он перешел от 1000 к 2000 тыс.

Верхняя запись - это моя тестовая версия, которую я преобразовал из WinWaitActive, что вызывало ненужное использование ЦП.

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... 

ответ

2

Сразу после момента появления окна и цикл побежал один раз, WainWait немедленно переходит к следующему оператору, потому что окно уже существует, позволяет контролировать и рекурсивно снова вызывает цикл (gosub), так что код, выделенный, например, 100 кадров стека в секунду, что в конечном итоге исчерпало стек вызовов.

Вместо использовать indefinite loop и перед продолжением ждут окна, чтобы закрыть:

Loop 
{ 
    WinWait,Page Setup 
    Control,Show,,Button8,Page Setup,(optimize for screen display) 
    WinWaitClose 
} 
+0

прибил его, спасибо большое! теперь я могу развернуть это для производства, а не напрягать его. – ssaviers