IanN1990 Posted February 13, 2013 Posted February 13, 2013 (edited) In one of my functions, i need to control a class of Internet Explorer but i found after long periods of time the size of the exe goes up. After doing some testing i found it was because of ObjCreate.Example Code.#NoTrayIcon While 1 sleep(250) Make() WEnd Func Make() Local $o_object = ObjCreate("InternetExplorer.Application") $o_object.quit $o_object =0 EndFuncIf you open up task manager, you will see the memory for the Autoit.exe goes up steady.I had hoping, though i dont have a very good understanding of ObjGet, the following would fix my problem.Retrieves a reference to a COM object from an existing process or filename.ObjGet ( "filename" [, "classname"] ).$IEPid = Run('C:\Program Files (x86)\Internet Explorer\iexplore.exe') $IEOb= ObjGet("", "InternetExplorer.Application")but it doesn't quite work and though a search of the forums didn't yeild a great deal but i did find this.Which suggest both fuctions would cause a leak. I have also looked for like a DeleteObj function as well, to clean up the resources but no luck there as well.Was wondering if anyone had any thoughts. Edited February 20, 2013 by IanN1990
water Posted February 13, 2013 Posted February 13, 2013 I first to a ObjGet to "connect" to an existing instance. If this fails because there is no running instance then I use ObjCreate: $oExcel = ObjGet("", "Excel.Application") If @error Then $oExcel = ObjCreate("Excel.Application") If @error Or Not IsObj($oExcel) Then Return SetError(1, @error, 0) EndIf For the latest beta versions this works without crashing the script. In 3.3.8.1 you need a COM error handler to grab the error which is raised when ObjGet fails. My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
IanN1990 Posted February 13, 2013 Author Posted February 13, 2013 (edited) On Full Version - 3.2.0 i get this error.D:DesktopNew AutoIt v3 Script (4).au3(4,75) : ERROR: 'Return' not allowed from global scope. If @error Or Not IsObj($oExcel) Then Return SetError(1, @error, 0)but this function really does confuse me. For Example.$oExcel = ObjGet("", "Excel.Application") ;Works ObjCreate("Excel.Application") ;Doesn't Work $IE = ObjGet("", "InternetExplorer.Application") ;Doesn't Work ObjCreate("InternetExplorer.Application") ;WorksSo i have the syntax right...and i am going down the ObjGet route to try and avoid any memory leaks if it will work at all.Edit. I just triedwhile 1 sleep(250) Local $oExcel = ObjGet("", "Excel.Application") ; Get an existing Excel Object WEndAnd it causes no memory leak. Now to just get it working with Internet Explorer.I found this and will try it out but my hopes are not that high.expandcollapse popup; An example how to obtain a running instance of the Internet Explorer ; ; Source: http://dbforums.com/t867088.html ; ; Requires: AutoIt with COM Support ; First we activate an example instance of the internet explorer. $URL="http://www.autoitscript.com" Run(@COMSPEC & " /c start iexplore.exe " & $URL) Sleep(3000); Give IE some time to load ; Internet Explorer is partly integrated in shell.application $oShell = ObjCreate("shell.application"); Get the Windows Shell Object $oShellWindows=$oShell.windows ; Get the collection of open shell Windows if not Isobj($oShellWindows) then Msgbox(0,"Error","Failed to obtain shell windows. Error: " & @error) exit endif ; Now we search through all open Shell Windows and locate our internet page sleep(5000) $MyIExplorer="" for $Window in $oShellWindows ; Count all existing shell windows ; Note: Internet Explorer appends a slash to the URL in it's window name if $window.LocationURL = $URL & "/" then $MyIExplorer=$Window exitloop endif next if not IsObj($MyIExplorer) then MsgBox(0,"Error","Could not find a running instance of the internet explorer") exit endif ; Now we can do whatever we want, because the found object ; has the same characteristics as "InternetExplorer.Application" Msgbox(0,"OK","Found the running instance of the Internet Explorer" & @CRLF & _ "Press 'OK' to navigate to www.google.com") $NewURL = "http://www.google.com/" $MyIExplorer.Navigate( $NewURL ) sleep(3000) ; Give it the time to load the web page Msgbox(0,"Quit","Press 'OK' to quit IE") $MyIExplorer.Quit ; Quit IE $MyIExplorer=0 ; Release from memoryDoesnt seam to work ethier Edited February 13, 2013 by IanN1990
IanN1990 Posted February 13, 2013 Author Posted February 13, 2013 So Taken the Example Above, i was able to get it working. One of the issues i faced was, if you have mutipliable instances of IE then seperating them from a title would be hard. while 1 sleep(1500) test() WEnd Func Test() $UnqiueIEID=TimerInit() $UnquiePid = Run('"C:\Program Files (x86)\Internet Explorer\iexplore.exe" about:' & $UnqiueIEID, '', @SW_SHOW) WinWait('about:' & $UnqiueIEID) $oShell = ObjCreate("shell.application") $oShellWindows=$oShell.windows If Not Isobj($oShellWindows) then exit $MyIExplorer="" for $Window in $oShellWindows ; Count all existing shell windows if $window.LocationURL = 'about:' & $UnqiueIEID then $MyIExplorer=$Window exitloop endif next if not IsObj($MyIExplorer) then exit $MyIExplorer.Quit ; Quit IE $MyIExplorer=0 ; Release from memory EndFunc Creates a IE with TimerInIt() As the title, which will almost always be unique unless 2 functions run at the exact milisecond but as the code shows. It still has a memory leak issue which i just cant not understand.
water Posted February 13, 2013 Posted February 13, 2013 Why do you use version 3.2.0? This is more than 3 years old. We all run 3.3.8.1. So if some code works here and it doesn't for you then it is hard/impossible to debug.Can't you upgrade to 3.3.8.1? My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
IanN1990 Posted February 13, 2013 Author Posted February 13, 2013 In Scite - Help - About Scite SciTE Version 3.2.0 Jun 9 2012 00:35:28 by Neil Hodgson. Updated: Valik & Jos I even tried re-downloading it from. http://www.autoitscript.com/site/autoit/downloads/ http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3-setup.exe http://www.autoitscript.com/site/autoit-script-editor/downloads/ http://www.autoitscript.com/cgi-bin/getfile.pl?../autoit3/scite/download/SciTE4AutoIt3.exe but does this mean, when you run the code in your scite. You dont have any memory leaks?
water Posted February 13, 2013 Posted February 13, 2013 SciTE is the editor. What we need is the Autoit version. Run:MsgBox(0, "", @AutoItVersion) My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
water Posted February 13, 2013 Posted February 13, 2013 I tried with ObjCreate("Excel.Application") and the following script.;#AutoIt3Wrapper_UseX64=y MsgBox(0, "", "Get memory consumption now!") For $i = 1 To 100 Sleep(250) ConsoleWrite($i & @LF) Make() Next MsgBox(0, "", "Finished!") Func Make() $o_object = ObjCreate("Excel.Application") ConsoleWrite(" " & @error & @LF) $o_object.quit EndFunc ;==>MakeThe memory consumption doesn't increase as fast as with IE. My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
IanN1990 Posted February 13, 2013 Author Posted February 13, 2013 A good example, and it does show there is clearly a memory leak. Is there any function that can be used to delete the Com Object or Clear it resources from memory. Is this a bug within autoit, the function itself or just Com Objects in general?
water Posted February 13, 2013 Posted February 13, 2013 Here you find detailed information about COM."When you assign an Object variable a different value, the 'pointer' will automatically be released. You can, for instance, force deletion of an Object by assigning it any number or any text value." My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
IanN1990 Posted February 13, 2013 Author Posted February 13, 2013 ;#AutoIt3Wrapper_UseX64=y MsgBox(0, "", "Get memory consumption now!") For $i = 1 To 100 Sleep(250) ConsoleWrite($i & @LF) Make() Next MsgBox(0, "", "Finished!") Func Make() $o_object = ObjCreate("Excel.Application") ConsoleWrite(" " & @error & @LF) $o_object.quit $o_object = 'Please stop using my memory' EndFunc ;==>Make Well using your example and statement. This should clear the memory but it doesn't. The ram keeps going up
water Posted February 13, 2013 Posted February 13, 2013 Then I would suggest to restart the script after x hours or x iterations. My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
IanN1990 Posted February 15, 2013 Author Posted February 15, 2013 So does this mean this is a bug and should be reported or submitted somewhere? If the helpfile says "Setting the object as a number or text should release the memory" and it isnt ? Am i wrong?
water Posted February 15, 2013 Posted February 15, 2013 Don't know if this is a bug. Don't have enough insight in the code. If you want the Devs to do something about your problem (locate and fix the bug or tell you that AutoIt works as designed) then you need to open a ticket. I'm not familiar with Microsofts memory management so I can't tell you if the behaviour you see is correct. But if your script eats up all memory and crashes then it looks like a bug (or bad coding). My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
guinness Posted February 16, 2013 Posted February 16, 2013 IanN1990, Did you try with the beta version of AutoIt v3.3.9.4? UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018
IanN1990 Posted February 19, 2013 Author Posted February 19, 2013 Yes i have, still has the memory leak. Each time it loops it gains 4kb + in memory.
BrewManNH Posted February 19, 2013 Posted February 19, 2013 Are you looking at the Working Set memory usage, or the Private Working Set memory usage? Because they aren't the same thing. http://cybernetnews.com/cybernotes-windows-memory-usage-explained/ http://getgreenshot.org/2010/07/24/a-few-words-on-memory-usage-or-working-set-vs-private-working-set/ If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
IanN1990 Posted February 20, 2013 Author Posted February 20, 2013 When i saw this topic, i was using Task Manager as is, which by default shows Privite Working Memory. Under the First link u gave me, i opened up the settings so it would show Working Set Memory as well but the outcome is still the same I run the snippet from the first post, and every loop both sets of memory are going up.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now