Har en burk med Windows server 2003 där jag kör asp med MySQL. Det är väl under dllhost.exe som ASP.DLL anropas. Program brukar inte frigöra minne medans det kör. Stänger allt som man ksa göra. Du kommer aldrig komma undan att den filen finns, ibland flera gånger. Det beror precis på som andreas säger att så fort någon surfar till din webbserver så kommer servern reservera trådar till din databas, sessionsobjekt och liknande. Det ingår helt enkelt i din webbserver. Visst är det kul med många besökare. Men efter 3-4 dagar ligger filen på cirka 110 mb. Det är ingen "fil". Det är ett program. Om du inte har så många besökare kan det bero på att sidorna inte är effektivt skrivna eller att du inte stänger alla dinna recordset och databasanslutningar. som sagt, allting du skriver set xx = server.createobject på ... skall även ha Många som använder execute metoden: Så ser min koppling till databasen ut. Bara genom att uppdatera den här koden tar dllhost.exe minne Det kan vara att ODBC drivrutinen inte återanvänder anslutningar. Du kan ju testa dig att använda EN OLEDB provider. Du borde slippa att ladda ODBC lagret. På så sätt spara resurser.dllhost.exe
Mitt problem är att varje gång jag gör en koppling till min mysql databas tar dllhost.exe massa minne som aldrig frigörs.
Vad ska jag göra?????Sv: dllhost.exe
Om du utformar resurssnålla sidor kommer desa inte ta lika mycket resurser i anspråk.Sv: dllhost.exe
Får samma problem även när jag "bara" kopplar upp mig mot databasen.Sv: dllhost.exe
Under ett normalt pass på pellesoft så brukar 3-4 dll:er ligga igång med 40-50mb reserverat minne så om de är stora skall du vara glad - då har du hög aktivitet på din server ;-)Sv: dllhost.exe
Sv: dllhost.exe
Om dina sidor är effektiva bör den inte växa onormalt stort. Sv: dllhost.exe
xx.close
set xx = nothing
Om du inte gör det så ligger connections och objekt öppna och tar minne tills sessionerna dör ut. Ibland kan de ligga längre, likaså med sessionsobjekt om du exempelvis gör felet att lägga hela recordset i sessioner så tar det väääldigt mycket plats. Så att gå igenom de mest frekvent användna (hmm, det ordet lät fel) sidorna och kollar att du stänger connection på varje sida så bör det vara så optimerat det kan vara.
Ha aldrig en .open på connection i en includefil för då är det lätt att du glömmer stänga och frigöra den på varje sida, oavsett om den används eller inte.Sv: dllhost.exe
<code>
set rs1 = con.Execute("SELECT...")
vTemp1 = rs1(0)
set rs2 = con.Execute("SELECT...")
vTemp2 = rs2(0)
set rs3 = con.Execute("SELECT...")
vTemp3 = rs3(0)
</code>
Frigör inte dem med close. Även om det borde göra det då det fortsätter var öppet först tills variablen frigörs.
Ett mer korrekt sätt att skriva samma kod är:
<code>
set rs1 = con.Execute("SELECT...")
vTemp1 = rs1(0)
rs1.Close
Set rs1 = Nothing
set rs2 = con.Execute("SELECT...")
vTemp2 = rs2(0)
rs2.Close
Set rs2 = Nothing
set rs3 = con.Execute("SELECT...")
vTemp3 = rs3(0)
rs3.Close
Set rs3 = Nothing
</code>
Det är i detta fallet dessutom onödigt att använda tre instanser av recordset. Man kan välja att återanvända första instansen:
<code>
set rs = con.Execute("SELECT...")
vTemp1 = rs(0)
rs.Close
rs.Open "SELECT...", con
vTemp2 = rs(0)
rs.Close
rs.Open "SELECT...", con
vTemp3 = rs(0)
rs.Close
Set rs = Nothing
</code>
Eller för att var konsekvent och öppna alla recordset på samma sätt:
<code>
set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT...", con
vTemp1 = rs(0)
rs.Close
rs.Open "SELECT...", con
vTemp2 = rs(0)
rs.Close
rs.Open "SELECT...", con
vTemp3 = rs(0)
rs.Close
Set rs = Nothing
</code>
Det sista sättet är att rekomendera. Helst då man vid t. ex. vid hämtning av statestig ställer flera fråger till databasen.Sv: dllhost.exe
<%
dim adoConn
set adoConn = Server.CreateObject("ADODB.Connection")
adoConn.Open "DSN=mysql"
if adoConn.errors.count = 0 then
response.write "Connected Successfully!"
adoConn.close
set adoConn = nothing
end if
%>Sv: dllhost.exe
JAg är osäker på om det är i OLEDB eller ADO connection poolen ligger i.