04. april 2010 - 08:39Der er
9 kommentarer og 1 løsning
Dårlig performance i forbindelse med xml og xslt i .net
jeg har lavet et lille test site hvor jeg henter noget data fra en webservice, som så skal renderes ved hjælp af noget xslt. Mit problem er performance, i det step hvor jeg laver mit dataset om til XmlDataDocument går det meget langsom (ca. 7 sek). Kan jeg ikke optimere det på nogen måde?
string xsltname = "test.xslt"; DataSet ds = [henter data fra min webservice];
//START Her går det langsomt!! XmlDataDocument xmlDoc = new XmlDataDocument(ds); //SLUT Her går det langsomt!
XsltSettings xslt_set = new XsltSettings(); xslt_set.EnableScript = true;
XsltArgumentList args = new XsltArgumentList(); if(!string.IsNullOrEmpty(Request.QueryString["id"])) args.AddParam("chosenID","",Request.QueryString["id"]);
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(Server.MapPath(xsltname), xslt_set, new XmlUrlResolver());
Jeg vil godt starte med at undskylde at jeg ikke har svaret tilbage her før nu!!
Lad mig forklare hvordan jeg gør tingende nu, så kan du evt. fortælle mig hvordan jeg burde gøre tingende :-)
Jeg starter med at lave et "Custom" DataSet med de kolonner og navngivninger som jeg ønsker. derefter laver jeg et database udtræk af noget data, det data propper jeg så ind i mit "custom" DataSet, og så retunere jeg det via min webservice.
Grunden til at jeg gør det på ovenstående måde er på grund af følgende: - min metode kan både bruges af webservice'en og internt. - Jeg troede et DataSet var lige så godt som rå XML. - Det var noget jeg kunne finde ud af :-).
Du forslår noget med en liste af custom klasser, hvad er grunden til det, istedet for bare at lave et XmlDocument ud fra det data jeg får fra mit database udtræk?
Også den sidste ting, jeg har ikke så meget erfaring med XmlDocument's, hvordan fylder jeg nemmest data i sådan størrelse?
Er bedre fordi: 1) List<X> eller X[] er meget simplere end DataSet og langt hurtigere at konvertere 2) web servicen kan genbruges af ikke-.NET klienter
(brug List<X> hvis den i SOAP bliver til et array - ellers fald tilbage til X[])
Og hvis du ikke behøver XSLT til formatering kan du bruge:
Hvis jeg retunere en liste med et custom objekt, så skal klienten vel også kende til mit custom object, eller hvad? og hvad hvis klienten ikke er .net, kan den så bruge det objekt til noget?
For statisk sprog som C#, Java, C++ etc. vil de generere en egen men kompatibel udgave af klassen udfra WSDL.
For dynamisk sprog som PHP, Python etc. behøder de ikke klassen. Koden kalder bare nogle felter/metoder og hvis de ikke findes får man en fejl på runtime.
Ja.
Hvis klassen er "pæn" d.v.s. at det er en data klasse med properties af almindelige typer som int, double, string etc., så kan der nemt genereres en ekvivalent klasse i Java (properties bliver så til getters og setters).
Og det er ikke teori. Det er noget som bruges hele tiden.
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.