Avatar billede eksperten1 Nybegynder
17. maj 2004 - 09:20 Der er 2 kommentarer

Script æder hukommelsen - Hjælp

Jeg har nedenstående upload script som jeg bruger til at uploade billeder til en webserver med, alle billederne får genereret en thumbnail der gemmes + at alle filer registreres i en mysql database.

Problemet er at den bare æder hukommelse, jeg uploader i store portioner á 40.000 billeder, og efter de første 20.000 har den brugt 2GB RAM på serveren. (der er en dedikeret 2cpu server til formålet)

Er der nogle af jer kloge mennesker derude der kan hjælpe med at finde fejlen, jeg syntes at jeg har forsøgt at sørge for at få destrueret alle objekter o.l. ?

mvh Mark

--Start ASP
<%
Set dbConn = Server.CreateObject("ADODB.Connection")
dbConn.Open "Driver=connString"


'// Prepare for ImageGLUE
Set canvas = Server.CreateObject("ImageGlue5.Canvas")
Set graph = Server.CreateObject("ImageGlue5.Graphic")
Set rect = Server.CreateObject("ImageGlue5.XRect")
   

'  Object creation
'  ***************
  Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")

'  Upload
'  ******
  mySmartUpload.Upload
 
eventID = mySmartUpload.form("event")
Eventid = Trim(Split(eventid," - ")(0))
destDir = "d:\runimages\" &  eventID &"\"

orgDir = destDir & "org\"
thumbDir = destDir & "thumb\"
mkdir(destdir)
mkdir(orgdir)
mkdir(thumbdir)

For each file in mySmartUpload.files
if not file.ismissing Then
strFileName = file.filename
cleanName = Split(strFileName,".")(0)
dbConn.Execute("DELETE FROM db_runnerphoto WHERE eventid = "& eventid &" AND fotoid = '"& cleanName &"';")
dbConn.Execute("INSERT INTO db_runnerphoto (eventid, filename, fotoid) VALUES ("& eventid &", '"& strFilename &"','"& cleanName&"');")

file.saveas(orgdir & file.filename)

'// Rename and copy the file
        newname = file.filename       
            '// Create a thumbnail
                inPath = orgdir & newname
                graph.SetFile inpath
                rect.String = graph(1).Rectangle
                canvas.Width = 80
                canvas.Height = (80 * rect.Height) / rect.Width
                canvas.DrawFile inpath, "size=" & canvas.Width & "," & canvas.Height
                canvas.SaveAs (thumbdir & newname), ""
                canvas.clear
            '// Finish Thumbnail

       
set canvas = nothing
set graph = nothing
set rect = Nothing

end if
next

dbConn.Close
Set dbConn = Nothing

Set mySmartUpload = Nothing

response.write "OK"
session.abandon

'The mkdir() function creates a directory and returns a string variable with a pass/fail message
Public Function mkdir( xVar )
  Set Sys = Server.CreateObject( "Scripting.FileSystemObject" )
  If Sys.FolderExists( xVar ) Then
    msg = true
  Else
    Sys.CreateFolder( xVar )
    msg = true
  End If
  Set Sys = Nothing
  mkdir = msg
End Function
%>
Avatar billede fixxxer Nybegynder
17. maj 2004 - 09:41 #1
uden at vide det, gætter jeg på at ImageGlue's kode ikke frigiver hukommelsen rigtigt. har leget lidt med egne komponenter til resize af billed, og der har jeg lært at man skal skrive sin kode omhyggeligt for at programmet frigiver sin hukommelse rigtigt.

noget helt andet, så forstår jeg ikke hvordan du kan frigive din komponenter til sidst i for-løkken:

set canvas = nothing
set graph = nothing
set rect = Nothing

når du opretter dem inden løkken begynder. Når den første thumbnail er lavet, hvordan bruger den så canvas, graph og rect hvis disse er sat til nothing?
Avatar billede eksperten1 Nybegynder
17. maj 2004 - 09:45 #2
Det er et levn fra tidligere forhold, der uploades kun 1 billeder ad gangen, så den for each løkke er i virkeligheden bare en anden måde at tilgå objektet istedet for upload.files(0)

Tja jeg ved naturligvis ikke med ImageGlue om det er den der bruger alt rammen, men jeg har tidligere lavet løsninger hvor det ikke skete, jeg har til gengæld ikke haft brugt smartUpload tidligere, har altid brugt aspupload, tror egenligt at jeg vil skrive det om til at bruge dette istedet.

Hilsen Mark
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester