16. december 2003 - 14:57Der er
14 kommentarer og 1 løsning
DataSet.ReadXML - Fejler ved store XML-filer
Jeg har lavet et program der henter data ud fra en Oracle database ind i et DataSet-objekt. Dette DataSet genererer så en XML-fil vha. oDataSet.WriteXML(...). Dette tager ialt ca. 10 sekunder, og der er nu genereret en XML-fil på 24-25MB. Dette er en relativt stor XML-fil. Problemet opstår imidlertid først, når jeg i den anden ende vil læse denne XML-fil ind i et DataSet-objekt igen vha. oDataSet.ReadXML(...). Den går i stå, og selv efter 10-15 minutter er der ikke sket noget, men CPU'en arbejder på 100%. Jeg prøvede at skære datamængden ned til en XML-fil på ca. 1MB. Dette tager ca. 5 sekunder at læse fra XML ind i et DataSet-objekt. Så en fil der er 25 gange så stor, burde tage 25 gange så lang tid, men nej. 25x5 = 125 sekunder = godt 2 minutter. Selv efter godt 10 minutter er der ikke sket noget endnu. Hvad kan jeg gøre for at få den til at acceptere så store datamængder. Det er meget kompliceret for mig, at skulle dele datamængden op i flere bidder, da forbindelsestypen er connectionless - dvs. modtager har ingen anelse om hvad afsender foretager sig, og ved heller ikke hvor mange filer der er afsendt. Dette kan jo også variere.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Jeg kan heller ikke åbne min XML fil i Visual Studio. Jeg har prøvet at højreklikke på filen, og vælge at redigere den i VS .NET men den står også af... gad vide hvad der er galt...
Er der ingen der har en ide? Det samme problem må jo også være gældende ved brug af DataSet i Visual Basic .NET og Managed C++.
Ved I i øvrigt, om der er nogen forskel mellem at benytte en sti til en xml-fil som indparameter i forhold til at benytte fx en XmlReader...? Man kan benytte mange forskellige, men jeg kan ikke finde noget nogen steder omkring forskellene.
Men ud af de 384 bruger Windows og diverse applikationer jo også noget.
Jeg ved ikke om det er det. Det er en hypotese. Du kan undersøge hypotesen ved at køre det igen og så overvåge processens memory forbrug i TaskManager Processes. Hvis den eksploderer, så har du fundet årsagen.
Jeg sidder hjemme nu, men jeg mener ikke at det var voldsomt. Omkring 30MB mener jeg.
Kender du forresten til hvordan man forbinder til COM-porten fra C#? I så fald har jeg 200 pts. hængende her: http://www.eksperten.dk/spm/440687
Jeg prøver lige at køre det andet program på min egen maskine. Der er godt nok kun 512 installeret, så det er svært at sige om det så er det. Men det er da værd at tage med. Du ved ikke, om der er generelle problemer med DataSet klassen og store XML-filer så? 25MB er da en stor fil, men så stor er den jo heller ikke...
Ok. Jeg må prøve noget andet så. Har du så nogen ide om hvad jeg kan gøre i stedet? Jeg kan godt manuelt dele filen op, men problemet er, at modtageren ikke ved hvor mange filer der skal hentes, og det ved afsenderen heller ikke før de er genereret. Er det noget med at lave en ekstra tekst-fil, indeholdende informationer om hvilke, eller hvor mange, filer, der skal hentes?
Sådan nærmest en HTML style løsning: indholds fortegnelsen indeholder overskrifter og links og så vælges der og udfra valg requested flere data. Ligesom en bog på nettet med en HTML side per kapitel.
Ja, det kan jeg måske gøre. Det kræver vist lige en tegning. Det er næsten en helt ny arkitektur for løsningen... Svarer du lige engang, så kan jeg lukke spørgsmålet...
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.