Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Antwort
 
Themen-Optionen
Alt 18.10.2005, 11:12   Nach oben    #1
Steve231
Gast
 
Beiträge: n/a
Standard Performance erhöhen

Hey Leudels,

Ich schilder euch mal kurz mein Problem:

Also ich lese via Java StringTokenizer eine Tabelle aus einer .txt Datei ein und lasse diese direkt in eine Datenbank eintragen.

Das problem hierbei ist jetzt, dass diese .txt Datei ca. 5000 Datensätze enthält, und dieser ganze vorgang so fast 20 min dauert?!?!?!

Wie kann ich denn die Performance dabei erhöhen? Ist es vielleicht sinnvoll alles erstmal in einen Vektor oder ein Feld zu schreiben, und es dann von dort erst eintragen zu lassen? Oder gibt es andere Möglichkeiten?

mfg

Steve
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.10.2005, 11:22   Nach oben    #2
Benutzer
 
Benutzerbild von 3qualizer
 
Registriert seit: 29.05.2004
Beiträge: 45
Standard

BufferedStreamReader, StringBuffer etc... ohne zu wissen wie du ausliest bzw in den Speicher holst wirds schwierig das zu sagen
/edit: Was ich damit meine: gib uns ein bisschen Code, im Idealfall so viel das es kompilierbar ist.
__________________
Jabber: melsi@amessage.de
3qualizer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.10.2005, 11:44   Nach oben    #3
Steve231
Gast
 
Beiträge: n/a
Standard

import java.io.*;
import java.util.StringTokenizer;
import java.sql.*;

public class CarsReader {

//Konstruktor

MyConnection x = new MyConnection();

public CarsReader()
{

}

public void lesen(String datei) {
try
{
FileReader f = new FileReader (datei);

String alles = "";
int c;
while (( c = f.read()) != -1)
{
alles = alles + (char)c; //die alte zeile wird mit dem neuen überschrieben
}

//Zeile zerlegen
StringTokenizer st = new StringTokenizer (alles, "\n");

while(st.hasMoreTokens())
{
String zeile = st.nextToken();
StringTokenizer stto = new StringTokenizer (zeile, "\t");

int anzahl = stto.countTokens();

if(anzahl>4)
{
String s1 = stto.nextToken();
String s2 = stto.nextToken();
String s3 = stto.nextToken();
String s4 = stto.nextToken();
String s5 = stto.nextToken();

eintragen(s1,s2,s3,s4);
}
}
}
catch(Exception e)
{
System.out.println("Fehler");
}


public void eintragen(String s1,s2,s3,s4)
{
try
{

x.stmt.executeUpdate("INSERT INTO CARS (Family, Analysis) VALUES ('"+s3+"','"+s4+"')");

}

catch(SQLException ex)
{
System.out.println("F***ing Fehler!");
}

}
}



So, das mal der Code..hehe
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.10.2005, 11:59   Nach oben    #4
Benutzer
 
Benutzerbild von 3qualizer
 
Registriert seit: 29.05.2004
Beiträge: 45
Standard

Wie ich schon erwähnt hab ist gebuffertes lesen u.U. erheblich performanter. Ausserdem kannst du auch mit BufferedReader#readline() ganze Zeilen lesen statt dich mit den einzelnen Zeichen zumzuschlagen

/edit: s5 bleibt so wies mir scheint ungenutzt... kann also weg
__________________
Jabber: melsi@amessage.de
3qualizer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.10.2005, 12:01   Nach oben    #5
Steve231
Gast
 
Beiträge: n/a
Standard

Also den BufferedReader werd ich gleich mal ausprobieren..meld mich nochmal bei Problemen

Viele Dank schonmal!!!!
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.10.2005, 16:39   Nach oben    #6
LordOfCodes
Gast
 
Beiträge: n/a
Standard

Hmm..
Du hast ohne es zu wollen, die langsamst mögliche Lösung gewählt..

Der Code
Code:
FileReader f = new FileReader (datei);
String alles = "";
int c;
while (( c = f.read()) != -1)
{
alles = alles + (char)c; //die alte zeile wird mit dem neuen überschrieben
}
sollte unbedingt durch folgendes ersetzt werden:

Code:
BufferedReader reader = new BufferedReader(new FileReader(datei));
String line = null;
while ( (line = reader.readLine()) != null) {

StringTokenizer stto = new StringTokenizer (line, "\t");
int anzahl = stto.countTokens();
  if(anzahl>4) {
    String s1 = stto.nextToken();
    String s2 = stto.nextToken();
    String s3 = stto.nextToken();
    String s4 = stto.nextToken();
    String s5 = stto.nextToken();
    eintragen(s1,s2,s3,s4);
  }
}
Dies sollte etwa schon doppelt so schnell sein..

Greets
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Singleton und Performance Ben Anwendungsdesign / Softwarearchitektur 31 03.01.2007 05:45
Performance: Referenzübergabe (PHP4) oder erneute Abfrage im MySQL-Query? Chr!s PHP-Programmierung 1 22.10.2006 17:36
[FRAGE] performance von phptags J33d3X PHP-Programmierung 14 30.01.2006 14:52
Speed erhöhen g4ul1x Desktop-Applikationen und Grafik 4 07.01.2006 10:53


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:22 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44