Serven där min sajt ligger äter en jävla massa minne hela tiden. Dett är ingenet fel på din kod. Får följande fel: Det är felstavat. Nämnas bör kanske att dessa ytterligare optimeraingar ger ett 'disconnected recordset', vilket har lite andra egenskaper än ett vanligt recordset. adOpenForwardOnly är default, om om inte jag misstar mig. Är det inte därför "onödigt" att sätta den egenskapen, alla proceduranrop tar prestanda? Det borde stämma... Om nu prestanda är så viktigt ska man väl dessutom försöka skriva så liten mängd kod som möjligt när det gäller ASP. Jag har hört något om att ASP-motorn ofta blir riktigt långsam om koden är över 100 rader. Stämmer det? Nej, det stämmer inte. Jag har en väldig massa bilder och texter som jag hämtar från olika tabeller.Serven äter minne
IT killen på hosting-firman säger att det kan vara databaskopplingar som ligger kvar i minnet. Har kollat att allt stängs men cirka en vecka efter omstart av serven får jag HTTP 1.1 New Application Failed.
kod:
set Conn = server.createobject("adodb.connection")
Conn.open "Driver=mysql odbc 3.51 driver;server=localhost;database=mydb;uid=anv;pwd=losen"
Set RS1=Conn.Execute("SELECT * FROM DB1 ORDER BY DATUM DESC")
lite kod
RS1.Close
Set RS1 = Nothing
Set RS2=Conn.Execute("SELECT * FROM DB2 ORDER BY DATUM DESC")
lite kod
RS2.Close
Set RS2 = Nothing
Set RS3=Conn.Execute("SELECT * FROM DB3 ORDER BY DATUM DESC")
lite kod
RS3.Close
Set RS3 = Nothing
Conn.Close
Set Conn = NothingSv: Serven äter minne
Men du kan ju återanväna ditt recordet. Vilket är effektivare.
<code>
<%
Dim RS
Dim Conn
Set Conn = server.createobject("ADODB.Connection")
Conn.open "Driver=mysql odbc 3.51 driver;server=localhost;database=mydb;uid=anv;pwd=losen"
Set RS = Server.CreateObject("ADODB.Reocordset")
RS.Open "SELECT * FROM DB1 ORDER BY DATUM DESC", Conn
'*** kod ***
RS.Close
RS.Open "SELECT * FROM DB2 ORDER BY DATUM DESC", Conn
'*** kod ***
RS.Close
RS.Open "SELECT * FROM DB3 ORDER BY DATUM DESC", Conn
'*** kod ***
RS.Close
Set RS = Nothing
Conn.Close
Set Conn = Nothing
%>
</code>
Detta borde ge en betydligt resurssnållare sida. Då du slipper instansiera flera instanser av recordset.Sv: Serven äter minne
Serverobjekt, ASP 0177 (0x800401F3)
Objektklassen kan inte bestämmas
/1.asp, line 16
Den fastnar på Set RS = Server.CreateObject("ADODB.Reocordset")Sv: Serven äter minne
Det ska stå:
<CODE>
Set RS = Server.CreateObject("ADODB.Recordset")
</CODE>
Ytterligare optimeringar som kan göras är:
<CODE>
RS.CursorLocation = adUseClient 'Ska köras före .open
RS.CursorType = adOpenForwardOnly 'Ska köras före .open
Set RS.ActiveConnection = Nothing 'Ska köras efter .open
</CODE>
/PKSv: Serven äter minne
http://www.guffa.com/Programming_article.asp?id=24Sv: Serven äter minne
Sv: Serven äter minne
Sv: Serven äter minne
Ifall koden blir långsam så beror det på hur koden är skriven, inte på hur många rader det är.
Det går att skriva dålig kod i vilket språk som helst...Sv: Serven äter minne
Vilket SQL kommando ska man göra?
så har kör jag:
<%
Dim Conn, RS
set Conn = server.createobject("adodb.connection")
Conn.open "Driver=mysql odbc 3.51 driver;server=xxxxx;database=xxxxx;uid=xxxxx;pwd=xxxxx"
If Request.QueryString("sida") = "1" Then
Set RS = server.createObject("ADODB.RecordSet")
RS.Open "SELECT bild,text FROM db1 ORDER BY DATUM DESC", Conn
ElseIf Request.QueryString("sida") = "2" Then
Set RS = server.createObject("ADODB.RecordSet")
RS.Open "SELECT bild,text FROM db2 ORDER BY DATUM DESC", Conn
Else
Conn.Close
Set Conn = nothing
Response.Redirect "start.asp"
End If
Response.Write("<img src='" & RS("bild") & "'>")
Response.Write("" & RS("text") & "")
RS.Close
%>
<%
If Request.QueryString("sida") = "1" Then
RS.Open "SELECT bild,text FROM db1 ORDER BY DATUM DESC", Conn
End If
ElseIf Request.QueryString("sida") = "2" Then
RS.Open "SELECT bild,text FROM db2 ORDER BY DATUM DESC", Conn
End If
Do until RS.EOF
Response.Write("<img src='" & RS("bild") & " align='left''> " & RS("text") & """)
RS.MoveNext
Loop
RS.Close
Set RS = Nothing
Conn.Close
Set Conn = Nothing
%>