Optimering af kode
HejsaJeg 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]
