Performance Pptimierung -Lesen/Schreiben

Status
Nicht offen für weitere Antworten.

ARadauer

Top Contributor
Hallo,

ich hab hier ziehmlich große Datein, die ich einlesen, bearbeite und wieder schreibe....
ca 20 Mio Zeilen, 2 GB

mal zum testen hab ich das geschrieben...

Code:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class TestWriteRead {
   
   public static void main(String[] args) throws IOException {
      long t = System.currentTimeMillis();
      
      File fileOut = new File("c:/out.txt");
      File fileIn = new File("c:/in.txt");
      
      BufferedReader reader = new BufferedReader(new FileReader(fileIn));
      BufferedWriter writer= new BufferedWriter(new FileWriter(fileOut));
      
      String line = null;
      
      StringBuffer buf = new StringBuffer();
      int c = 0;
      while((line = reader.readLine())!=null){
         c++;
         buf = new StringBuffer(line);
         //lustige sachen mit dem String machen         
         writer.write(buf.toString());
      }      
    
     
      writer.flush();
      writer.close();
      reader.close();
      System.out.println(((System.currentTimeMillis()-t)/1000)+" s");
      System.out.println(c);
   }

}

schon mal ganz nett 140 sekunden. Kennt jemand noch ein paar einfache Tipps wie ich das noch beschleunigen könnte? nicht das es ungedingt notwendig wäre, aber wenns einfach geht... schneller ist immer besser ;-)
 

Murray

Top Contributor
Ich nehme mal an, dass Du in Deine echten Programm den StringBuffer wirklich brauchst (im geposteten Code ist er ja überflüssig).
Eventuell verbessert es die Performance etwas, wenn Du den StringBuffer nur einmal erzeugst und ihn in der Schleife immer mit setLength(0) leermachst und die gelesene Zeile mit append anhängst - so gibt es deutlich weniger Allokationen, und der GC hat weniger zu tun.
Wenn Du mindestens Java 5 verwendest, solltest statt StringBuffer StringBuilder verwenden (geringfügig schneller, da nicht synchronisiert).
 

ARadauer

Top Contributor
setLength(0) gute idee, hab nach einem clear gesucht - nichts gefunden.. darum das new ..
StringBuilder statt StringBuffer... mal versuchen

Code:
   public static void main(String[] args) throws IOException {
      long t = System.currentTimeMillis();
      
      File fileOut = new File("c:/out.txt");
      File fileIn = new File("c:/in.txt");
      
      BufferedReader reader = new BufferedReader(new FileReader(fileIn));
      BufferedWriter writer= new BufferedWriter(new FileWriter(fileOut));
      
      String line = null;
      
      StringBuilder buf = new StringBuilder();
      int c = 0;
      while((line = reader.readLine())!=null){
         c++;
         buf.setLength(0);
         buf.append(line);
         //lustige sachen mit dem String machen         
         writer.write(buf.toString());
      }      
    
     
      writer.flush();
      writer.close();
      reader.close();
      System.out.println(((System.currentTimeMillis()-t)/1000)+" s");
      System.out.println(c);
   }
hat statt 140sec 147 gedauert... interessant
 

Atze

Top Contributor
ist nur ne ganz kleine hilfe, vielleicht garnicht merkbar, aber ist pre- nicht schneller als postinkrement? hab ich mal irgendwo aufgeschnappt, also vielleicht besser ++c!?
 

ice-breaker

Top Contributor
Ja das stimmt schon, weil ein Pre-Inkrement von Maschinencode her nur ein Befehl ist, ein Post-Inkrement dagegen 3 oder 4. Aber diese Optimierung fällt in den Nanosekundenbereich und wird wohl kaum messbar sein.

Was machst du denn bei den "lustigen" Sachen, bzw wielange braucht das Programme noch ohne diese lustigen Sachen ?
 

Wildcard

Top Contributor
Du solltest deinen StringBuilder unbedingt in einer sinnvollen Größe (Originaldateigröße?) initialisieren um dir mächtig viele Objekt Allokierungen und Arraycopies zu sparen.
 

Ark

Top Contributor
Ich würde zudem die readLine()-Methode so nachbauen, dass die neue die Zeichen direkt in den StringBuilder einsetzt. Jedes normale readLine() erzeugt nämlich einen neuen String, und 20 Mio. Strings ... das ist schon ordentlich. ;)

Ark
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
H Watson-Crick-Complement Performance Allgemeine Java-Themen 18
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
B Performance Messungen Allgemeine Java-Themen 4
J Threads verbessern die Performance NICHT ? Allgemeine Java-Themen 8
X Performance für Tomcat / Apache optimieren Allgemeine Java-Themen 2
I Performance - JDBC UPC PoolDataSoure Allgemeine Java-Themen 0
E Lambda filter performance Allgemeine Java-Themen 2
D Performance-Probleme mit Joda-Time Allgemeine Java-Themen 3
A Jasper Report Performance bei PDF erzeugen Allgemeine Java-Themen 0
A Best Practice Variablen vertauschen - Performance Allgemeine Java-Themen 1
R DBUnit Performance Probleme Allgemeine Java-Themen 0
P Performance: super explizit erwähnen oder weglassen? Allgemeine Java-Themen 5
S starke performance probleme des forums Allgemeine Java-Themen 10
C Performance Tips Allgemeine Java-Themen 13
A Performance/Speicherplatz-Nutzung bei Tests Allgemeine Java-Themen 6
R Java Performance testen Allgemeine Java-Themen 18
StrikeTom Java Performance Fragen Allgemeine Java-Themen 5
V Performance steigern Allgemeine Java-Themen 7
D Reflection-Performance Allgemeine Java-Themen 7
M Einfluss von Caching auf die Performance (große Arrays) Allgemeine Java-Themen 24
R Collections Performance einer HashMap Allgemeine Java-Themen 26
i<3java [Groovy/Grails](oder auch java) Mögliche Performance Probleme bei Mailversendung Allgemeine Java-Themen 2
D Performance Objektallokation Allgemeine Java-Themen 28
J Java Performance nicht nachvollziehbar Allgemeine Java-Themen 3
I Library für High Performance Mime Type Erkennung Allgemeine Java-Themen 8
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
M Runtime.exec() - Performance / Frage zu Threads Allgemeine Java-Themen 5
M Performance Allgemeine Java-Themen 6
M Performance Allgemeine Java-Themen 5
E Performance website download Allgemeine Java-Themen 13
MQue Performance Methodenaufruf - if Abfrage Allgemeine Java-Themen 19
hdi Was frisst in meinem Programm den Speicher / verschlechtert die Performance Allgemeine Java-Themen 11
J Performance von Java GUI-Anwendungen Allgemeine Java-Themen 2
U Java Performance im Vergleich zu C++ in speziellem Anwendungsfall Allgemeine Java-Themen 6
S Performance und Function Call Depth Allgemeine Java-Themen 6
H Performance Vorteil durch Wechsel der JVM? Allgemeine Java-Themen 6
A Performance: byte[] in byte[][][] konvertieren Allgemeine Java-Themen 2
T Performance ArrayList#remove Allgemeine Java-Themen 8
Chris81T Performance Problem durch mehrfaches Starten eines JAVA Prog Allgemeine Java-Themen 8
G Hibernate, JTable und Performance Allgemeine Java-Themen 17
M Listener und Performance Allgemeine Java-Themen 9
P Performance: Ziehen ohne Zurücklegen (große Datenmenge) Allgemeine Java-Themen 10
D Performance: ArrayList vs. Array vs. "Eigene Liste&quot Allgemeine Java-Themen 8
M nichtreferenzierte Objekte auf NULL setzen -> Performance Allgemeine Java-Themen 4
S Ursache für schlechte Performance Allgemeine Java-Themen 2
L Java Performance Check Tool Allgemeine Java-Themen 3
S Performance von Comparator Allgemeine Java-Themen 3
egrath Performance Problem mit File-I/O Allgemeine Java-Themen 6
S Performance Problem Allgemeine Java-Themen 11
X Java Performance auf Sun Systemen bzw. generell Allgemeine Java-Themen 4
T Performance String-Operationen und StringBuffer (1.4und 1.5) Allgemeine Java-Themen 18
P miese performance bei nem BufferedImage + repaint :( Allgemeine Java-Themen 6
T Performance-Grundlagen Allgemeine Java-Themen 4
G Performance Problem bei der Übertragung Server zum Client Allgemeine Java-Themen 3
V Performance Leck finden Allgemeine Java-Themen 3
T Tile Game Performance Allgemeine Java-Themen 32
M Performance enorm langsam Allgemeine Java-Themen 26
F Performance von Reflection vs Statisches Coden Allgemeine Java-Themen 4
M Performance: Java zu C/C++ bei Datenbankanwendung Allgemeine Java-Themen 3
Y unnecessary cast & Performance Allgemeine Java-Themen 29
conan2 Performance von paint() Allgemeine Java-Themen 2
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2
F Bilder als "Thumbnails" laden - Performance Allgemeine Java-Themen 6
S Java3D Performance optimieren Allgemeine Java-Themen 5
F Wenn ihr Performance wollt nehmt C++ Allgemeine Java-Themen 39
N Performance-Test (Geschwindigkeit von Methoden vergleichen)? Allgemeine Java-Themen 4
S Performance Test mit JMeter Allgemeine Java-Themen 2
T Performance Allgemeine Java-Themen 8
J Anfängerliste für gute Performance? Allgemeine Java-Themen 3
Luma Performance-Problem mit RandomAcces File Allgemeine Java-Themen 4
I Performance bei "String <-> Byte"-Umwandlung Allgemeine Java-Themen 4
I Performance-Probleme bei Schleife Allgemeine Java-Themen 3
C Performance von FOR Schleifen Allgemeine Java-Themen 25
C Performance Vergleich, Java vs. Tcl/Tk Allgemeine Java-Themen 3
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
G Dateien lesen Allgemeine Java-Themen 3
OnDemand Excel lesen wie CSV Allgemeine Java-Themen 7
S Textdatei statt von Dateisystem aus .jar lesen Allgemeine Java-Themen 3
oskarS85 GeoTiff NDVI pixelweise lesen Allgemeine Java-Themen 2
R Lesen von Interfaces (Programm Vervollständigen) Allgemeine Java-Themen 10
OnDemand CSV lesen flexible Spalten Allgemeine Java-Themen 3
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
S File lesen und schreiben Java 6 Allgemeine Java-Themen 2
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
L Input/Output Kassenzettel lesen aus einem Bild Allgemeine Java-Themen 2
M Daten aus MatLab Datei lesen Allgemeine Java-Themen 8
G Excel Tabelle lesen und in neue Excel Tabelle einfügen Allgemeine Java-Themen 11
J File in Package erstellen & lesen mit Programmstart in externe Projekt Allgemeine Java-Themen 3
A File lesen Codierung Charset Allgemeine Java-Themen 5
E Socket Dynamische Klasse von ObjectOutputStream lesen. Allgemeine Java-Themen 8
D Mit Java PHP hashmap lesen Allgemeine Java-Themen 1
B Quellcode lesen - Aussortieren Allgemeine Java-Themen 3
A Steuerung von Spiel aus Datei lesen Allgemeine Java-Themen 0
F Best Practice Große Anzahl an Objekten speichern und lesen Allgemeine Java-Themen 19
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
OnDemand Java Barcode lesen Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben