Hej! Hei! Hej! Problemet är att du anropar samma metod rekursivt hela tiden. Till Anders! Varför inte iterera istället, typ: Tack för era inlägg!Minnesläckage vid körning av VBScript/JScript i Windows Script Host(WS
Jag har ett enerverande problem med ett Script. Scriptet är skrivet i VB och körs på en dator med Win XP professional. Windows Script Host version 5.6 finns installerad på datorn(följer med Win XP). Scriptet ska ligga i bakgrunden och köras med ett intervall av ca 30 sekunder. Jag använder mig av metoden Sleep() i WSH och sedan kallar jag på startmetoden igen. Detta fungerar jättebra i några timmar, men sedan blir det "Out Of Memory" och Scriptet lägger av! Jag har kontrollerat aktivitetshanteraren samtidigt som scriptet körs och där syns det tydligt att minnesanvändningen ökar ju längre scriptet går. Har även stött på samma problem när jag kör ett JScript. Har provat scriptet på en annan dator med Win XP Professional och fått samma resultat.
Kan det vara något problem med minnesallokeringen i WSH när man har ett script som ska ligga och snurra hela tiden? Mycket tacksam för svar som kan lösa mitt problem.....RogerSv: Minnesläckage vid körning av VBScript/JScript i Windows Script Hos
Svårt att säga så mycket utifrån din korta beskrivning.
Har du kod exempel som demonstrar va och hur du gjör?Sv: Minnesläckage vid körning av VBScript/JScript i Windows Script Hos
Mitt VBScript används för att kontrollera en specifik katalog var 30:e sekund. Alla filer i katalogen listas i en array. Filerna i arrayen kontrolleras för att sortera ut filer av typen *.ps. Dessa postscript filer skickas i sin tur till ett externt program (ghostscript) som konverterar dem till pdf-filer. Anledningen till att scripetet ska ligga och snurra är för att användare stoppar in nya ps-filer relativt ofta i den specifika katalogen. Jag har även kört ett enklare VBScript som inte gör någonting förutom att visa en message box och sedan vilar (sleep()), och det blir exakt samma fel efter några timmar, "out of memory".
Så här ser koden ut för scriptet som bara skriver ut count i en msgbox:
Dim count
count = 0
RunScript(count)
Sub RunScript(count)
MsgBox(count)
count = count + 1
WScript.Sleep(5000)
RunScript(count)
End Sub
Om du provkör detta så notera hur minnesanvändningen sjunker i början för att sedan sakta öka med 4kb i taget.
//RogerSv: Minnesläckage vid körning av VBScript/JScript i Windows Script Hos
Lägg in en timer istället och skriv ut i Timer-event för den.
/AndersSv: Minnesläckage vid körning av VBScript/JScript i Windows Script Hos
Ja, det har du ju rätt i!
Men hur skapar jag en timer som ska fungera så att scriptet körs tex var 30:e sek?
//RogerSv: Minnesläckage vid körning av VBScript/JScript i Windows Script Hos
<code>
Dim count
count = 0
While(...)
RunScript(count)
count = count + 1
Wend
Sub RunScript(count)
MsgBox(count)
WScript.Sleep(5000)
End Sub
</code>Sv: Minnesläckage vid körning av VBScript/JScript i Windows Script Hos
Löste problemet med en While-loop som körs så länge en variabel är sann!
Får på så vis inte problem med rekursion.
Dim value
value = true
Start(value)
Sub Start(value)
Do while value = true
RunScript()
WScript.Sleep(10000)
Loop
End Sub
Sub RunScript()
...
End Sub
Ha en bra dag
//Roger