15. juni 2001 - 00:27Der er
8 kommentarer og 2 løsninger
StringTokenizer ???
hvis jeg skal linie for linie gå igennem en fil. bliver jeg så nød til at lave en ny StringTokenizer for hver linie.. det går jo sindsyget langsomt. er der ikke en metode til bare at skifte den String ud jeg vil have delt op ??
Går det sindssygt langsomt? Altså har du testet (profilet) og iagttaget at initialisering af StringTokenizere er en performance flaskehals? Mit gæt er at det overhovedet ikke er langsomt, og slet ikke hvis du ser på hvad du ellers laver. Hver gang du siger nextToken(), så laver du et nyt String objekt, så den operation er ligeså dyr som at lave en StringTokenizer. Hvis effektivitet er vigtigt så er det helt forkert at arbejde med Strings. Så står den på StringBuffer, char[], og nogle fikse hjælpeklasser
char delimiter = \':\'; String line; char[] word; int start; for (int i=0; i < lines.size(); i++) { line = ((String)lines.get(i)); start = 0; for (int j=0; j < line.length(); j++) { if (line.charAt(j)==delimiter) { word = new char[start-j+2]; line.getChars(start,j,word,0); System.out.println(word)); start=j+1; } } System.out.println(\"=======================\");
Eller denne:
char delimiter = \':\'; String line; int start; for (int i=0; i < lines.size(); i++) { line = ((String)lines.get(i)); start = 0; for (int j=0; j < line.length(); j++) { if (line.charAt(j)==delimiter) { System.out.println(line.substring(start,j)); start=j+1; } } System.out.println(\"=======================\");
Jeg tror den sidste er langsommere, da substring skal lave en ny String, som er langsommere end at lave et char[], men det er ikke til at sige hvor meget/hvordan det optimeres af JVM\'en. Der skal lige rettes lidt hvis linierne ikke slutter med et \':\'.
Er du iøvrigt sikker på at det ikke er System.out.println(.) der bruger al tiden?
jeg fatter det ikke !!!!!!! jeg har kørt test på både min egen ting og de 2 du har lavet og den er 15 sec. om at læse 43 linier..... det er jo ufatteligt langsomt.....
er der ikke en helt anden måde at checke i en passwd fil på som er hurtigere ???
Husk at profilere! Hvis du ikke har et værktøj til det, så tag tid som jeg viste ovenover, så du ved hvor lang tid der bruges i hver kodestump. På den måde kan du spore dig ind på hvor det går langsomt - bare at kigge ned i koden og sige \"det må være der\" duer (som regel) ikke.
Jeg kan godt huske du postede et eksempel hvor den tog en pause på 300 ms inde i et loop - jeg var lige ved at kommentere det, men besluttede mig for at det nok var fordi du ville kunne nå at læse hvad der blev skrevet på skærmen
Jeg troede du havde millioner af linier i den ArrayList... ;)
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.