[ASP] Te lange string zorgt voor timeouts

Pagina: 1
Acties:

  • Blue-eagle
  • Registratie: September 2000
  • Niet online
We hebben een soort gastenboek gemaakt in een ver verleden waarin zo'n 1000 mensen hebben geschreven. Deze gegevens staan in XML. Een systeem waarmee we werken leest deze XML in (via ASP), en past deze aan zodat het "systeemcode" uitspuugt.

Nepcode:
code:
1
2
3
for each record in allerecords
  string = string & recordinformatiehier
next


De string die hieruit komt met zo'n 50 "records" is klein genoeg om door ASP goed gekeurd te worden. Maar nu met zo'n 1000 records wordt het teveel. Ik ben tot deze conclusie gekomen nadat ik de string had ingekort die door deze loop werd gemaakt.

De totale XML die in deze string wordt opgeslagen is nodig omdat we deze tegen een XSL pagina "aangooien" (mergen).

De oplossingen die we hier al bedacht hadden:
* Iedere record in een dictionary "record" zetten. Probleem: je zult ook dit object dan samen moeten voegen op een punt om er een XML string uit te krijgen;
* Niets in een string gooien, maar gewoon in een .xml bestand weg schrijven;
* GoT vragen of ze daar misschien weten of er wellicht componenten bestaan die het mogelijk maken enorm grote strings op te slaan in je code.

Note: Ik ben ervan op de hoogte dat dit achteraf misschien niet zo'n goede oplossing was als dat we dat 2 jaar geleden dachten ;) Het hele systeem wijzigen is ook geen optie.

Het probleem is dus dat ASP traag lijkt te worden nadat een enorme string wordt opgeslagen in een variabele.

De vraag is dus: zijn hier oplossingen voor?

Dus als iemand nog ideeën heeft, let's hear them!

  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Kun je tussentijds die string niet gewoon naar het scherm writen en leegmaken?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Is paging op je gastenboek geen optie?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

je kunt server.scripttimeout hoger zetten....

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Volgens mij kan VB strings tot 2Gb aan, dus daar zal het em niet inzitten.

Ik zou eens proberen om met:
VBScript:
1
2
3
4
Do While Not rs.eof
... record afhandeling
   rs.MoveNext
Loop

te gaan werken. Ik vermoed dat een for each op 1000 records een te heftige belasting is op de verbinding met de db.

Welke foutmelding kreeg je uberhaupt?

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 17:00

mulder

ik spuug op het trottoir

Je zou ook kijken of de database xml kan uitspugen.

[ Voor 6% gewijzigd door mulder op 08-06-2004 13:37 ]

oogjes open, snaveltjes dicht


  • Blue-eagle
  • Registratie: September 2000
  • Niet online
André schreef op 08 juni 2004 @ 13:28:
Kun je tussentijds die string niet gewoon naar het scherm writen en leegmaken?
Nee, de volledige XML heb ik nodig omdat juist in de XSL pagina de paging wordt afgehandeld. Dit in verband met de onkunde van ASP en het sorteren van XML :)
NMe84 schreef op 08 juni 2004 @ 13:30:
Is paging op je gastenboek geen optie?
Heeft het al, maar dan wel in de XSL pagina. Zie hierboven waarom.
Verwijderd schreef op 08 juni 2004 @ 13:32:
je kunt server.scripttimeout hoger zetten....
Staat op 10 minuten nu, het probleem is ook niet dat het niet werkt, het probleem is dat het 3 minuten duurt ;(
bigbeng schreef op 08 juni 2004 @ 13:33:
Volgens mij kan VB strings tot 2Gb aan, dus daar zal het em niet inzitten.

Ik zou eens proberen om met:
VBScript:
1
2
3
4
Do While Not rs.eof
... record afhandeling
   rs.MoveNext
Loop

te gaan werken. Ik vermoed dat een for each op 1000 records een te heftige belasting is op de verbinding met de db.

Welke foutmelding kreeg je uberhaupt?
Er is geen database, het probleem is puur en alleen dat de string te lang wordt voor of de ASP, of de XML processor.

Geen foutmeldingen, alleen 3 minuten wachten voor 1000 records :o

Note: kort ik de string in door er een stuk of drie attributen uit te verwijderen, dan wordt hij ook sneller. Haal ik meer weg, wordt hij sneller, voeg ik meer toe.... dan wordt hij trager :)

Edit: note bij note: 3 attributen weghalen betekend dus dat over 1000 records, ik 3000 attributen weghaal.

[ Voor 4% gewijzigd door Blue-eagle op 08-06-2004 13:41 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je zou eens kunnen kijken naar de .GetString methode van het recordset object.


deze link is misschien niet helemaal wat je wilt, maar geeft denk ik wel genoeg info. Het ligt een beetje aan hoe de string er precies uit moet zien of dit lukt.

[ Voor 72% gewijzigd door P_de_B op 08-06-2004 13:45 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Geen database... hrm okee dan. Dat verandert de zaak.

Kun je dmv timer niet wat meer informatie verkrijgen over welk stuk nu hoelang duurt?

  • Blue-eagle
  • Registratie: September 2000
  • Niet online
Timer zit er ook in :)

Het laden van de pagina duurt 0.18 tot 0.23 seconden als ik deze kleine loop verwijder. Als ik hem terug zet wordt het weer een groot drama.

  • Blue-eagle
  • Registratie: September 2000
  • Niet online
Stel je voor, je hebt een database met 1000 records van mensen. Naam, e-mail adres, IP adres, titel, verhaaltje. Je loopt door deze database heen en slaat al deze gegevens op in XML vorm in een (1) variabele. Dit moet omdat je deze variabele in een andere functie gebruikt om er HTML van te maken (merge XML met XSL)

code:
1
  response.write functieDieXmlMetXslMerged(strXml, "e:\blaat.xsl")


strXml is dus belangrijk. Anders moet ik >10 uur spenderen aan het wijzigen van eeuwen (2 jaar) oude code :'(

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:59

gorgi_19

Kruimeltjes zijn weer op :9

Wat achtergrond informatie over de string:
http://www.asp101.com/articles/john/outputperf/default.asp :) Ik denk dat het concenaten killing is. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Dan zou mijn idee zijn om de XML sdk van microsoft eens te gaan bekijken. Ik vermoed dat het document object daarvan efficienter met grote brokken xml om kan gaan dan de string concatenator van vbscript.

Ik neem aan dat je deze al gebruikt om de xml van xsl opmaak te voorzien?

  • Blue-eagle
  • Registratie: September 2000
  • Niet online
* Blue-eagle slaat zich voor de kop

Gewoon alles in het XML object zetten :) Dit lijkt me vooralsnog een oplossing ;) Moet het nog eventjes in praktijk brengen, maar zodra ik dat voorelkaar heb post ik hier nog wel.

Nu maar hopen dat ASP niet van de string die het xml object terug geeft (object.xml) ook daadwerkelijk een string maakt voor het 'mergen' :D Maargoed, dat zie ik dan wel weer.

Verwijderd

Het zal inderdaad in het concatten zitten van je string.
Naast dat je volgens mij al een oplossing hebt gevonden (ff niet hele topic gelezen) hier een linkie voor het vervolg:

http://www.planet-source-...p?lngWId=4&txtCodeId=7110

Misschien dat je hier ook wat aan zult hebben. Heb in verleden zelf zoiets gebruikt, maar kan de voorbeeld code niet meer vinden.
Pagina: 1