06. juli 2005 - 22:06Der er
12 kommentarer og 1 løsning
Koster det hukommelse at vise en fil gennem url rewriting?
Jeg bruger url-rewriting til at vise filer med.
Min fil ligger her: billeder/thumbnails/100.jpg
Men med url rewriting sørger jeg for at man kan tilgå filen sådan: thumbnail_100.aspx
Jeg ved, at når man viser filer gennem en aspx-fil med Response.WriteFile-funktionen, så bliver filen lagt midlertidigt ind i hukommelsen. Det giver problemer med serveren hvis der er mange store filer der bliver hentet samtidig.
Mit spørgsmål er, om den metode jeg skitserer herover med url rewriting, medfører at filen bliver lagt midlertidigt ind i hukommelsen.
Nogen der ved det, eller evt. har idéer til hvordan jeg kan finde ud af det?
så du spørger om hvorvidt IIS når den server static filer læser alt fra disk til memory inden den sender til browser eller den læser/sender chunks af et eller andet antal KB ?
Nej, det ved jeg godt den ikke gør som udgangspunkt. Men jeg er usikker på om den gør det som udgangspunkt når man kører gennem ISAPI-filteret. Og det gør man jo når det er en aspx-fil. Ellers ville jeg heller ikke kunne url rewrite.
Det er fordi jeg har læst denne artikel om file streaming og memory-forbrug, hvor de var nødt til at opfinde deres eget ISAPI-filter.
men jeg tror at du skal forklare lidt om den URL rewriting - jeg har aldrig leget med det i IIS, men i mange andre webservere så mapper man fra nogle URL'er som browseren ser til nogle interne URL'er - og requesten må jo nødvendigvis blive processet som den interne URL - så jeg mangler vist en brik i puslespillet
I min asp.net applikation fanger jeg et request i Global.asax og tjekker Request.Path. Afhængigt af hvad Request.Path er, udfører jeg metoden "Context.RewritePath(internalPath);". Hvad den metode helt nøjagtigt gør inde bagved, ved jeg desværre ikke. Det er nok del af spørgsmålet.
Det smarte er thumbnail_100.aspx behandles af .NET ISAPI-filteret, selvom filen slet ikke findes. Derfor kan jeg behandle requestet i global.asax, selvom requestet ikke kalder en gyldig fil.
Resultat af test: Page File Usage steg fra 700 MB til 1,3 GB ved hentning af den samme 100MB-fil i tre forskellige browser-vinduer.
Men jeg er ikke sikker på om jeg kan stole på testen. Det er nok ikke godt at lave en test hvor klient og server er samme maskine. Så ved jeg jo ikke om memory-forbruget er serverens eller klientens skyld.
Hvis jeg laver et socket-kald og lader være med at hente filen, så kan det være det er derfor, hvis der ikke bruges memory. Hvis jeg henter filen, kan det igen være klientens skyld at memory-forbrug stiger.
Jeg tror den eneste pålidelige test kan opnås med adskilt klient og server hvor serverens ram-forbrug kan overvåges. Det må jeg lige se om jeg kan fikse. Tak for coachingen.
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.