Followers 0

# Memory Clear

## 18 posts in this topic

Is there a way to wipe the memory/cache from the system throughout a script while a program stays open? Or will clearing the memory through the script out of whack with the variables? ...If that is the case, can you clear the memory relating to a specific program?

Ex.

Script start--

Loop begins---(loop a few times)
Process 1---
Process 2---
Clear memory/cache
Loop ends---

Process 3---

Script ends---

Did a search, couldn't come up with an end answer.

##### Share on other sites

#3 ·  Posted (edited)

Is there a way to wipe the memory/cache from the system throughout a script while a program stays open? Or will clearing the memory through the script out of whack with the variables? ...If that is the case, can you clear the memory relating to a specific program?

Ex.

Script start--

Loop begins---(loop a few times)
Process 1---
Process 2---
Clear memory/cache
Loop ends---

Process 3---

Script ends---

Did a search, couldn't come up with an end answer.

Are you looking for

"DirRemove()"

Edited by Paulie

##### Share on other sites

Mike, I get an error when I try that code. No Paulie, that wouldn't help me.

##### Share on other sites

Mike, I get an error when I try that code. No Paulie, that wouldn't help me.

Did you use it exactly like that, or did you by any chance put any "error" handling in it? Do you have the psapi.dll on the computer your trying to use it on? If you do, is the psapi.dll located at the script dir or in the @systemdir?

[center]Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.[/center]

##### Share on other sites

I used it as is...or maybe I'm not using it correctly. I copied it to a page by itself and called it. I then checked how much memory was reduced, and the exact same amount was there as before I called it.

I have that dll in the program folder of autoit, in the system dir, and a couple other folders.

##### Share on other sites

I used it as is...or maybe I'm not using it correctly. I copied it to a page by itself and called it. I then checked how much memory was reduced, and the exact same amount was there as before I called it.

I have that dll in the program folder of autoit, in the system dir, and a couple other folders.

Well what was the error?

[center]Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.[/center]

##### Share on other sites

Per your PM saying there was no error, then obviously your not calling it right.

Do it like this:

;_ReduceMemory()
Func _ReduceMemory($i_PID = -1) If$i_PID <> -1 Then
Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int',$i_PID)
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long',$ai_Handle[0])
DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0]) Else Local$ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
EndIf

Return $ai_Return[0] EndFunc;==> _ReduceMemory() While 1 Sleep(100) WEnd Once Then do it like this: _ReduceMemory() Func _ReduceMemory($i_PID = -1)
If $i_PID <> -1 Then Local$ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID) Local$ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0]) DllCall('kernel32.dll', 'int', 'CloseHandle', 'int',$ai_Handle[0])
Else
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1) EndIf Return$ai_Return[0]
EndFunc;==> _ReduceMemory()

While 1
Sleep(100)
WEnd
it dropped 2700 k when I tried it.

[center]Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.[/center]

##### Share on other sites

#9 ·  Posted (edited)

OK, I don't know what I'm doing wrong, or if I'm looking for the wrong thing. I'm calling it by double clicking the script, and I also put it in a gui and called it from a button. Then I use the memory get stats to see what percentage is in use, and it hasn't been reduced. Do I have the right idea of how this works?

Also, the only time I got an error was with the false statement, so I put a quotation around false and that error didn't come up again. That error was an unknown function.

Edited by Champak

##### Share on other sites

OK, I don't know what I'm doing wrong, or if I'm looking for the wrong thing. I'm calling it by double clicking the script, and I also put it in a gui and called it from a button. Then I use the memory get stats to see what percentage is in use, and it hasn't been reduced. Do I have the right idea of how this works?

Also, the only time I got an error was with the false statement, so I put a quotation around false and that error didn't come up again. That error was an unknown function.

You got an error with False because your not using Beta... Replace False with 0, example (with beta of course):
$v = 1 If$v = True Then MsgBox(0, 'True Proof:', $v & ' = True')$v = 0
If $v = False Then MsgBox(0, 'False Proof:',$v & ' = False')

[center]Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.[/center]

##### Share on other sites

Is there a particular file to grab from the beta download in order to get this function, or do I need the whole thing?

##### Share on other sites

Is there a particular file to grab from the beta download in order to get this function, or do I need the whole thing?

You just need to download Beta, and run in SciTe with Alt+F5. Most functions we use are with Beta so you really should have it anyway.

[center]Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.[/center]

##### Share on other sites

I got the beta and am activating it through "beta run", and still nothing.

##### Share on other sites

I got the beta and am activating it through "beta run", and still nothing.

Why don't you show the script and how your executing it, there's nothing wrong with the code, it's your implementation I would be willing to bet. We could chase our tails for several days or solve the problem right now... Also what OS are you using it on?

[center]Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.[/center]

##### Share on other sites

#15 ·  Posted (edited)

The script I was calling it with a button, I deleted that already, but the other way was simply copying this exactly what's there with no changes or additions, saving it and calling it from beta run-open.

Edited by Champak

##### Share on other sites

The script I was calling it with a button, I deleted that already, but the other way was simply copying this exactly what's there with no changes or additions, saving it and calling it from beta run-open.

As I said, show how your using it, and what OS. Are you sure your computer has the psapi.dll? This script does work. It reduces the "Memory Usage" total, use Task Manager to see it, run it in a fresh script (Test.au3) or something without the function call, then run it with the function call and you will see the difference. I don't know or understand what other implimentation your trying to use it for other than reducing the amount of memory usage it retains, but without a reproduction script, all we keep doing is making this thread larger.

[center]Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.[/center]

##### Share on other sites

It works for me also.

Regular Autoit test

;_ReduceMemory

Memory usage is: 3,964k

After with it

_ReduceMemory

Memory usage is: 652k

So thats a total of 3312k Free'd up.

[font="Verdana"]Valik:Get it straight - I'm not here to say please, I'm here to help - if my help's not appreciated then lotsa luck, gentlemen.[/font]

##### Share on other sites

1/ Im using XP

2/ I have 5 psapi.dlls. 1 on the windows system32 folder, 1 in the beta folder 1 in the release folder, and with a few other apps.

3/ I put everything to a new file by itself as you said

4/ I'm calling it through the scite program with Alt F5.

5/ When I run it like:

$i_PID = -1 If$i_PID <> -1 Then
Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int',$i_PID)
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long',$ai_Handle[0])
DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0]) Else Local$ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
EndIf

Return $ai_Return[0] I get >"C:\Additions\Misc\AutoIt v3.1.1\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /beta /ErrorStdOut /in "C:\Documents and Settings\Money\Desktop\Gui test\Test.au3" /autoit3dir "C:\Program Files\AutoIt3\beta" /UserParams >Running AU3Check params: from:C:\Additions\Misc\AutoIt v3.1.1\AutoIt3\SciTE\au3check\ C:\Documents and Settings\Money\Desktop\Gui test\Test.au3(11,24) : ERROR: 'Return' not allowed from global scope. Return$ai_Return[0]
~~~~~~~~~~~~~~~~~~~~~~~^
C:\Documents and Settings\Money\Desktop\Gui test\Test.au3 - 1 error(s), 0 warning(s)
!>AU3Check ended.rc:2
>Running:(3.1.1.0):C:\Additions\Misc\AutoIt v3.1.1\AutoIt3\autoit3.exe "C:\Documents and Settings\Money\Desktop\Gui test\Test.au3"
C:\Documents and Settings\Money\Desktop\Gui test\Test.au3 (4) : ==> Unknown function name.:
Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int',$i_PID)
Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', ^ ERROR ->AutoIT3.exe ended.rc:1 >Exit code: 1 Time: 3.725 When I run it the original way like: Func _ReduceMemory($i_PID = -1)

If $i_PID <> -1 Then Local$ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID) Local$ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0]) DllCall('kernel32.dll', 'int', 'CloseHandle', 'int',$ai_Handle[0])
Else
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1) EndIf Return$ai_Return[0]
EndFunc;==> _ReduceMemory()

I get

>"C:\Additions\Misc\AutoIt v3.1.1\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /beta /ErrorStdOut /in "C:\Documents and Settings\Money\Desktop\Gui test\clearmem.au3" /autoit3dir "C:\Program Files\AutoIt3\beta" /UserParams
+>AU3Check ended.rc:0
>Running:(3.1.1.0):C:\Additions\Misc\AutoIt v3.1.1\AutoIt3\autoit3.exe "C:\Documents and Settings\Money\Desktop\Gui test\clearmem.au3"
C:\Documents and Settings\Money\Desktop\Gui test\clearmem.au3 (4) : ==> Unknown function name.:
Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int',$i_PID)
Local \$ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', ^ ERROR
->AutoIT3.exe ended.rc:1
>Exit code: 1   Time: 0.764