CPU belasting ASP script...

Pagina: 1
Acties:

  • GoVegan
  • Registratie: Juni 2002
  • Laatst online: 16-08 22:25
Ik gebruik het onderstande script (ja ik heb het niet zelf getyped) om jpg afbeeldingen te dwingen om te downloaden. (dat ze dus niet in de browser worden geopend maar een 'open' 'save as' venster krijgen.

alleen wanneer ik dit script gebruik word de cpu enkele seconde tot 100% belast. dit met bestanden van maximaal 1 mb. het duurt dus echt enige tijd voordat je het venster krijgt om he op te downloaden.
de machine waarom hij draaid is een:
pentium 4 1.8 GHZ
1 gig aan ram
OS: XP-pro
server: IIS
(meer gegevens heb ik zo niet)

ik vroeg me nu af of die normaal is en wat ik hier aan kan doen. Ik weet wel dat jullie geen helpdesk zijn maar toch...
En wanneer ik een gelijksoortige functie in php ga gebruiken hou ik dan het zelfde probleem?


al vast bedankt, peter

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%

    FileName = Request("wat")



    Const ForAppending = 8
    Const ForReading = 1
    Const ForWriting = 2
    Const TristateFalse = 0
    Const TristateMixed = -2
    Const TristateTrue = -1
    Const TristateUseDefault = -2


    Dim FSO
    Dim TS


    Dim strFile
    Dim resolutie
resolutie = "low"
If (Request("res")    <> "") Then 
  resolutie = Request("res")   
End If

 If resolutie = "high" Then 
      strFile = Server.MapPath("../../visuals/highres/"&(Filename))
 ElseIf resolutie = "low" Then
      strFile = Server.MapPath("../../visuals/preview/"&(Filename))
 End If 

    Dim strFileSave:    strFileSave = Filename

    Call Response.AddHeader("Content-Disposition","attachment; filename=""" & strFileSave & """")


    Response.ContentType = "bad/type"


    Set FSO = Server.CreateObject("Scripting.FileSystemObject")

    Set TS = FSO.GetFile(strFile).OpenAsTextStream(ForReading,TristateTrue)

    Do While Not (TS.AtEndOfStream)

        Response.BinaryWrite(TS.Read(1))
    Loop

    TS.Close
    Set TS = Nothing
    Set FSO = Nothing

    Response.End
%>

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Die 100% belasting is niet zo gek. Je leest de file in om en vervolgens direct naar de client te pompen. Op een server met vooral snel geheugen moet dat geen probleem zijn, maar toch vindt ik het allerminst vreemd dat je het zo doet. Waarom verwijs je niet direct naar de betreffende file :?

OT: En die rij constanten bovenaan je script? Die bestaan al he...

日本!🎌


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
_Thanatos_ schreef op 08 april 2003 @ 20:19:
Die 100% belasting is niet zo gek. Je leest de file in om en vervolgens direct naar de client te pompen. Op een server met vooral snel geheugen moet dat geen probleem zijn, maar toch vindt ik het allerminst vreemd dat je het zo doet. Waarom verwijs je niet direct naar de betreffende file :?

OT: En die rij constanten bovenaan je script? Die bestaan al he...
...
om jpg afbeeldingen te dwingen om te downloaden. (dat ze dus niet in de browser worden geopend maar een 'open' 'save as' venster krijgen.
le-zen ;)

maarre, ik gebruik dat script ook (wel zelf geschreven, maar in grote lijnen hetzelfde) en CPU belasting is niet echt drastisch hoog hoor...

//
en als toevoeging: ik weet niet of PHP dat beter doet, maar misschien een eigen geschreven COM componentje dat het iets sneller wordt? Ik merk helaas op uit je post dat je daar nog niet aan toe bent ;)

[ Voor 14% gewijzigd door RobIII op 08-04-2003 20:24 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • GoVegan
  • Registratie: Juni 2002
  • Laatst online: 16-08 22:25
_Thanatos_ schreef op 08 April 2003 @ 20:19:
Die 100% belasting is niet zo gek. Je leest de file in om en vervolgens direct naar de client te pompen. Op een server met vooral snel geheugen moet dat geen probleem zijn, maar toch vindt ik het allerminst vreemd dat je het zo doet. Waarom verwijs je niet direct naar de betreffende file :?

OT: En die rij constanten bovenaan je script? Die bestaan al he...
reden waarom ik het zo die is zoals ik al schreef, dat je dan het bestand voor als download voorgeschoteld krijgt. dit staat netter dan wanneer je een afbeelding van 1 mb in je browser word geopend.

snap

  • GoVegan
  • Registratie: Juni 2002
  • Laatst online: 16-08 22:25
RobIII schreef op 08 April 2003 @ 20:22:
//
en als toevoeging: ik weet niet of PHP dat beter doet, maar misschien een eigen geschreven COM componentje dat het iets sneller wordt? Ik merk helaas op uit je post dat je daar nog niet aan toe bent ;)
nop nog niet echt, (komt nog wel. duurt gewoon ff :) )

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Dit is wat ik gebruik. Het is in mijn geval voor een bug-track base...
Ik heb wat zooi eruit geknipt om het overzichtelijk te houden, maar je moet wel nog effe her en der wat aanpassen...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<%
'Download an attachment for a given case.
'Make sure when you call this page, you use an href with target="_top"
'because else IE will get confused about it's frameset... :-(
Dim strFile, strOrgName, objStream

<knip>

Response.Buffer = True

<knip>

On error resume next

Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1 'adTypeBinary
objStream.LoadFromFile (server.mappath(Application("AttachDir")) & "\" & strFile)
if err.number<>0 then PrintError Err.description
With Response
    .AddHeader "Content-Disposition", "attachment; filename=" & strOrgName
    .Charset = "UTF-8"  ' In a Perfect World, Your Client would also
                                ' have UTF-8 as the default  In Their Browser
    .ContentType = "application/download"
    .BinaryWrite objStream.Read
    .Flush
End with
objStream.Close
Set objStream = Nothing
if err.number<>0 then PrintError Err.description
%>


Het grote verschil is dat ik een ADO Stream gebruik, en jij het FileSystem object. Ik denk dat het wel iets beter werkt, maar harde feiten heb ik niet.

[ Voor 84% gewijzigd door RobIII op 08-04-2003 20:33 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Guru Evi
  • Registratie: Januari 2003
  • Laatst online: 21-08 16:35
Hmmz, probeer es met ASP2PHP en zie dan of ie hetzelfde doet. Waarom zo'n belasting? Zie eens of het geen algemeen prob van WinXP + ISS is ;-) Zo kan je wel een server DDoS'en eh ;-)

Pandora FMS - Open Source Monitoring - pandorafms.org


  • tomato
  • Registratie: November 1999
  • Niet online
Euh... waarom doe je zo veel moeite als het enige effect dat je wilt bereiken een andere Content-type header is :?

Zorg er dan gewoon voor dat je webserver dat alternatieve Content-type verstuurt. Ik weet niet hoe, maar ik kan me niet voorstellen dat dat niet gemakkelijk in IIS te regelen is...

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
tomato schreef op 08 april 2003 @ 20:33:
Euh... waarom doe je zo veel moeite als het enige effect dat je wilt bereiken een andere Content-type header is :?

Zorg er dan gewoon voor dat je webserver dat alternatieve Content-type verstuurt. Ik weet niet hoe, maar ik kan me niet voorstellen dat dat niet gemakkelijk in IIS te regelen is...
Zit wel iets in denk ik. Misschien is een contentheader sturen en dan een response.redirect naar het bestand al genoeg???

Iets in deze richting:
code:
1
2
3
4
5
6
7
With Response
    .AddHeader "Content-Disposition", "attachment; filename=" & strOrgName
    .Charset = "UTF-8"  ' In a Perfect World, Your Client would also
                                ' have UTF-8 as the default  In Their Browser
    .ContentType = "application/download"
    .Redirect strFile
End with


Overigens heb je in mijn voorbeeld wel ADO 2.6 of hoger nodig meen ik me te herinneren.

[ Voor 22% gewijzigd door RobIII op 08-04-2003 20:37 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • tomato
  • Registratie: November 1999
  • Niet online
RobIII schreef op 08 April 2003 @ 20:35:
Zit wel iets in denk ik. Misschien is een contentheader sturen en dan een response.redirect naar het bestand al genoeg???
Nee, ik bedoel het nog eenvoudiger ;)

Waarom heel die redirect als je ook gewoon direct de url van het plaatje op kunt vragen? Zorg er dan voor dat de webserver het juiste content-type meestuurt wanneer het plaatje opgrevraagd wordt.

(je laatste idee werkt overigens niet vermoed ik, het plaatje waar je naar redirect zal weer een eigen content-type hebben)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
tomato schreef op 08 April 2003 @ 21:17:
[...]

Nee, ik bedoel het nog eenvoudiger ;)

Waarom heel die redirect als je ook gewoon direct de url van het plaatje op kunt vragen? Zorg er dan voor dat de webserver het juiste content-type meestuurt wanneer het plaatje opgrevraagd wordt.

(je laatste idee werkt overigens niet vermoed ik, het plaatje waar je naar redirect zal weer een eigen content-type hebben)
Ja, dat bedacht ik later ook ;)

Maar ik weet niet of je voor bepaalde plaatjes (een subdir?) een andere content-header kunt meegeven dan andere plaatjes (uit een andere subdir?). Zou ik eens in IIS moeten vogelen... Heb ik nu geen zin in :Y)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • tomato
  • Registratie: November 1999
  • Niet online
Als dat niet kan is IIS software voor prutsers :+

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Okok, niet goed gelezen. Nu wel.

Er gaan imo een paar kleine dingetjes fout: ten eerste open je het plaatje als textbestand. Dat gaat niet. Gebruik in plaats daarvan het voorbeeld van RobIII.

Ook het lezen schrijven van slechts één enkele byte is zeer inefficiënt...

Over de content-disposition header: daar doe je twee dingen fout. ten eerste mag de bestandnaam niet tussen aanhalingstekens (") staan en ten tweede mag je niet het volledige pad opgeven. Daarnaast moet je ook in gedachte houden, dat browsers nog altijd zelf bepalen wat ze hiermee doen. Ik heb dit ook weleens geprobeerd met XML bestanden en het was een zooitje wat ervan gemaakt werd. Opera geeft het gewoon weer (ook al kan ie dat helemaal niet, maar das in jouw geval niet van toepassing), Mozilla deed het wel en bij MSIE deed de ene versie het wel en de andere maakte er een potje van. Ook hoe ik het content type instelde, maakt geen kont uit ("officiëel" moet het application/x-ms-download zijn (ofzo), maar dat maakte dus geen verschil...)

Aleens aan gedacht om het te zippen en dan pas naar de client te pompen?

日本!🎌

Pagina: 1