06. juni 2011 - 21:59Der er
7 kommentarer og 1 løsning
Datastruktur langsom på netværk
Jeg har lavet et lille program der håndterer nogle datafiler/objekter der primært indeholder 2 vectorer med hhv 1000 og 10000 objekter. Disse objekter består af hhv 3 og 4 Strings. Det hele er ganske simpelt opbygget og virker fortræffeligt når jeg afvikler programmet lokalt på en PC. Det åbner hurtigt og gemmer hurtigt.
Men når jeg placerer datafilen et eller andet sted på netværket og åbner den derfra bliver det ekstremt langsomt at arbejde med. Det tager ca 20 sek at åbne og efterfølgende gemme data i filen. Filen fylder ca 450Kb.
Så fik jeg den ide at kopiere filen til den lokale PC og arbejde med den lokalt og kopiere tilbage når jeg skulle gemme, det nedsatte ventetiden til ca 2-3 sek. Dette er dog stadigvæk for meget, og derfor vil jeg lige høre om der er en bedre metode til håndtering af den mængde data på et netværk helst uden at skulle omskrive programmet til eksempelvis en Access-database.
Jeg bruger følgende til input: File inFile = new File("Sti til fil"); FileInputStream stream = new FileInputStream(inFile); ObjectInputStream inObjectStream = new ObjectInputStream(stream); return (MyObject)inObjectStream.readObject();
Følgende til output: File outFile = new File("Sti til fil"); FileOutputStream stream = new FileOutputStream(outFile); ObjectOutputStream outObjectStream = new ObjectOutputStream(stream); outObjectStream.writeObject(ovntype); outObjectStream.close();
Jeg prøvede med en BufferedInput/OutputStream, men det gav ikke nogen synlig ændring i indlæsningstiden.
Hvis det skulle have din interesse, så fik dog efter mange forskellige krumspring løst opgaven på en lidt anden måde, der gav mig de svartider jeg forventer af et program, dvs. respons stort set øjeblikkeligt.
Jeg løste det ved at nedbryde mit dataobjekt til en lang (meget lang)tekststreng når jeg gemmer den. Jeg indlæser så fra disken/netværket via en BufferedReader der tager en FileReader som argument. Herefter nedbryder jeg tekststrengen med en StringTokenizer og opbygger mit dataobjekt lokalt via disse tokens. Jeg havde ikke regnet med at det ville være hurtigere, da jeg føler at jeg kodemæssigt behandler langt flere data, men virkeligheden er altså en helt anden. Jeg kan ikke give en anden forklaring end at den lange tekststreng bliver indlæst via netværket ekstremt hurtigt ift. at indlæse det samlede objekt.
Ja, og Jeg synes ikke der var nogen synlig forskel på om jeg brugte bufferen med eller uden size.
Synes godt om
Ny brugerNybegynder
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.