Avatar billede el_fredo Praktikant
16. december 2003 - 14:57 Der 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.
Avatar billede el_fredo Praktikant
16. december 2003 - 15:16 #1
Jeg kan se, at HD-lyset blinker det første minut, men så stopper det. Gad vide om der er en slags timeout på ReadXML metoden...
Avatar billede el_fredo Praktikant
16. december 2003 - 15:18 #2
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...
Avatar billede el_fredo Praktikant
16. december 2003 - 15:50 #3
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.
Avatar billede arne_v Ekspert
16. december 2003 - 20:29 #4
Hvor meget memoy har du i din maskine ?

DOM parsere er berygtet for at bruge 4-5 gange så meget memory
som XMl filen fylder d.v.s. at 25 MB XML fil kan bruge 125 MB RAM !
Avatar billede el_fredo Praktikant
16. december 2003 - 20:44 #5
Der er vistnok installeret 384MB på den maskine jeg har på arbejdet. Kan det virkeligt være det?
Avatar billede arne_v Ekspert
16. december 2003 - 20:48 #6
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.
Avatar billede el_fredo Praktikant
16. december 2003 - 20:51 #7
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...
Avatar billede arne_v Ekspert
16. december 2003 - 20:54 #8
Jeg kender ikke til noget kendt problem (men det kan du ikke
udelede så meget af - jeg laver al mit XML programmering i Java)
Avatar billede el_fredo Praktikant
16. december 2003 - 20:57 #9
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?
Avatar billede arne_v Ekspert
16. december 2003 - 21:01 #10
Med hensyn til COM/C# så kan det ikke gøres i ægte .NET - jeg har¨
smidt et link til an anden guide end r9's.
Avatar billede el_fredo Praktikant
16. december 2003 - 21:04 #11
Tak for det.
Avatar billede arne_v Ekspert
16. december 2003 - 21:05 #12
Svært at sige hvad du skal.

Måske lave flere små XML filer og en "indholds fortegnelse", så henter
client kun den siste og requester så de andre efter behov.
Avatar billede arne_v Ekspert
16. december 2003 - 21:07 #13
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.
Avatar billede el_fredo Praktikant
16. december 2003 - 21:12 #14
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...
Avatar billede arne_v Ekspert
16. december 2003 - 21:14 #15
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester