Avatar billede tblaster Nybegynder
22. august 2006 - 20:35 Der er 1 løsning

Optimering af kode

Hejsa

Jeg har en kode som er ufattelig langsom og meget tung for serveren at køre. Håbede at I måske kunne finde nogle steder hvor jeg kan optimer den. Kort fortalt er det en kode der gennemløber en række videoklip for at lave thumbnails og gemme dens informationer i en database.

Som I kan se, så laver jeg 3 objekter hver gang jeg får fat i en ny fil: ADODB.Stream, COMObjectsNET.InfoRetriever og COMobjectsNET.MediaProcessor. Vil det være smartere (altså mere optimal for serveren) at flytte uden for min for løkke?

[code]
' Løber klippne igennem og tilføjer nye
for each fil in fi
   
    If fil.name <> "Thumbs.db" Then
        Fuldsti_arr    = Split(fil.path, "wwwroot")
        FuldSti     = Replace(Replace(Replace(Fuldsti_arr(1), "\" & Mappe & "\", ""), "\", "/"), "'", "\'")
        Mapper         = Replace(Replace(Fuldsti_arr(1), "\" & Mappe & "\", ""), "\" & fil.name, "")
        MappeNavn2  = ""
        If instr(Mapper, "\") then
            Mapper_Arr     = split(Mapper, "\")
            MappeNavn2  = Replace(Mapper_Arr(ubound(Mapper_Arr)-1), "'", "\'")
            MappeNavn    = Replace(Mapper_Arr(ubound(Mapper_Arr)), "'", "\'")
        Else
            MappeNavn = Replace(Mapper, "'", "\'")
        End If
       
        FilNavn     = Replace(fil.name, "'", "\'")
        FilNavnarr    = Split(FilNavn, ".")
        Navn        = ""
        For i = 0 to Ubound(FilNavnarr)-1
            If i > 0 then Navn = Navn & "."
            Navn = Navn & FilNavnarr(i)
        Next
        TotVidCounter = TotVidCounter + 1
       
        ' Filnavnet må ikke indeholde 2 punktumer ".."
        If instr(FilNavn, "..") Then
            Session("Fejl") = Session("Fejl") & FuldSti & "<br>"
        ' Fjerner jpg filer
        Elseif instr(lcase(FilNavn), ".jpeg") <> 0 Then
            TotVidCounter = TotVidCounter - 1
        Else
            ' Undersøger om klippet allerede ligger i databasen
              Sql = "SELECT * FROM Data JOIN dataXkategori ON data.ID = dataXkategori.DID WHERE Navn ='" & Navn &"' and Url like '%" & FuldSti & "%'"
            Set rs = Conn.Execute(Sql)
           
            If rs.EOF and rs.BOF Then ' Klippet ligger ikke i databasen
               
                ' Finder mappeid'er som er gyldige
                Sql0 = "SELECT Kategorier.ID From Kategorier JOIN kategoriXsprog ON kategorier.ID = kategoriXsprog.KID Where Navn = '" & Mappe & "' and ParentID = 0"
                Set rs0 = Conn.Execute(Sql0)
                HovedMappe_ID = rs0("ID")
                IDer = FindIDer(HovedMappe_ID)
               
                ' Finder kategori id'et til den mappe hvor klippet skal tilføjes
                If MappeNavn2 & "X" <> "X" Then
                    Sql3 = "SELECT *, Kategorier.ID FROM Kategorier JOIN kategoriXsprog ON kategorier.ID = kategoriXsprog.KID WHERE Navn ='" & MappeNavn2 & "' and Funktion = 'Filmklip' and (Kategorier.ID = 0 " & Replace(IDer, "ID", "Kategorier.ID") & ")"
                    Set rs3 = Conn.Execute(Sql3)
                    Do while not rs3.eof
                        Sql2 = "SELECT *, Kategorier.ID FROM Kategorier JOIN kategoriXsprog ON kategorier.ID = kategoriXsprog.KID WHERE Navn ='" & MappeNavn & "' and Funktion = 'Filmklip' and (Kategorier.ID = " & rs3("ID") & " " & Replace(IDer, "ID", "Kategorier.ID") & ")"
                        Set rs2 = Conn.Execute(Sql2)
                            If not rs2.eof then
                                DB_Kategori = rs2("ID")
                            End If
                        rs3.movenext
                    Loop
                Else
                    Sql2 = "SELECT *, Kategorier.ID FROM Kategorier JOIN kategoriXsprog ON kategorier.ID = kategoriXsprog.KID WHERE Navn ='" & MappeNavn & "' and Funktion = 'Filmklip' and (Kategorier.ID = 0 " & Replace(IDer, "ID", "Kategorier.ID") & ")"
                    Set rs2 = Conn.Execute(Sql2)
                    DB_Kategori = rs2("ID")
                End If
               
                ' Tilføjer klippet
                If DB_Kategori & "X" <> "X" Then
                    On Error Resume Next
                   
                    'Create instabce of Aurigma Media Processors InfoRetriever
                    Dim objInfoRetriever
                    Set objInfoRetriever = Server.CreateObject("COMObjectsNET.InfoRetriever")
                   
                    ' Create instabce of Aurigma Media Processors
                    Dim objMediaProcessor
                    Set objMediaProcessor = Server.CreateObject("COMobjectsNET.MediaProcessor")
                   
                    ' Load file
                    MapPath_Sti    = Server.MapPath(Mappe & "/" & FuldSti)
                    objInfoRetriever.RetrieveInfo MapPath_Sti
                   
                    MediaType     = objInfoRetriever.MediaType
                    Width         = objInfoRetriever.Width
                    Height        = objInfoRetriever.Height
                    Varighed    = objInfoRetriever.Duration
                    BitRate        = 0 ' objInfoRetriever.BitRate
                   
                    If MediaType = 2 Then ' Video
                        ' Create a thumbnail for the video
                        objMediaProcessor.LoadFromFile MapPath_Sti
                        objMediaProcessor.StartTime = round(Varighed)/2
                        objMediaProcessor.SmoothFactor = 50
                        objMediaProcessor.OptimizationOn = True
                        objMediaProcessor.Quality = 100
                        objMediaProcessor.SaveToFileAsJpeg(MapPath_Sti & ".jpeg") ' Save to file
                    End If
                   
                    ' Clean Up
                    Set objInfoRetriever = Nothing
                    Set objMediaProcessor = Nothing
                   
                    ' Henter størrelsen på billedet
                    fileName = server.MapPath(replace("/" & Mappe & "/" & FuldSti, ",", "%2C"))
                    fileName = replace(fileName, "%2C", ",")
                    Set obj = Server.CreateObject("ADODB.Stream")
                    obj.Type = 1
                    obj.Open
                    obj.LoadFromFile fileName
                    bdy=obj.Read()
                    SizeofFile = lenb(bdy)
                   
                    If Err = 0 Then
                        conn.execute("INSERT INTO Data(Navn, Tekst, Url, Sprog, Dato, Score, Stemmer, Hits, Aktiv, Dimension, Størrelse, Varighed, BitRate) VALUES ('" & Navn & "','', '" & FuldSti & "', 'All', '" & Dato & "', " & Score & ", 1, 0, 1,'" & Width & "x" & Height & "', '" & SizeofFile & "', '" & Varighed & "', '" & BitRate & "')")
                        Sql0 = "SELECT Data.ID From Data Where Navn = '" & Navn & "' and Url = '" & FuldSti & "' Order By Data.Id Desc"
                        Set rs0 = Conn.Execute(Sql0)
                        Conn.execute("INSERT INTO dataXkategori(ParentID, DID) VALUES (" & DB_Kategori & ", '" & rs0("ID") & "')")
                       
                        VidCounter = VidCounter + 1
                    Else
                        Session("Fejl") = Session("Fejl") & FuldSti & " (Aurigma Media Processor fejl)<br>"
                    End If
                   
                    Error.Clear
                    On Error GoTo 0
                End If
              End If
        End If
    End If
next
[/code]
Avatar billede tblaster Nybegynder
03. marts 2007 - 16:23 #1
Lukker
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