W
wissenhungriger Gast
Gast
Hi, ich bin gerade am durchtesten mehrerer Sprachen um ein Gefühl dafür zu bekommen. Ich habe testweise (weil das so in der Art bald auf mich zukommen wird) einen kleinen unrepäsentativen Benchmarktest durchgeführt.
So sehen am Ende auf meiner alten Möhre (winxxppro svp 1GBRam Pentium 4 2.66 MHz) die Ergebnisse aus:
Delphi: 8,6 Sekunden (erster Durchlauf 10Sek)
Java 1.6: 80 Sekunden!! (erstellt mit der netbeans 5.5.1 IDE)
c# : 9 Sekunden
purebasic: 8 Sekunden
Blitzmax: 11 Sekunden
so sieht der Java-Code aus, zumindest der wichtige Algo-Teil:
Getestet habe ich mit 10000 (zehntausend) Clients.
Meine Frage ist jetzt, warum dauert es mit Java sooo lange? Je größer i wird, desto länger braucht es.
Habe ich einen Fehler gemacht? Wie kann man sin und cos optimieren, kann ich für die langsamen Berechnungen auf c oder c++ ausweichen?
Im Endeffekt, soll das Teil sein eines Programms, das auf einen Server laufen soll. Die Aufgabenverteilung wird sein 1. viele sin/cos Berechnungen 2. viele Pakete an vielen Clients schicken 3. Datenbankzugriff.
Und bitte keine Flames oder so was, nur nackte Aufklärung, Java gefällt mir so oder so, auch wenn ich momentan den Weg über Processing gehe und pur Java da einbaue wo ich es brauche.
Danke!
Phil
So sehen am Ende auf meiner alten Möhre (winxxppro svp 1GBRam Pentium 4 2.66 MHz) die Ergebnisse aus:
Delphi: 8,6 Sekunden (erster Durchlauf 10Sek)
Java 1.6: 80 Sekunden!! (erstellt mit der netbeans 5.5.1 IDE)
c# : 9 Sekunden
purebasic: 8 Sekunden
Blitzmax: 11 Sekunden
so sieht der Java-Code aus, zumindest der wichtige Algo-Teil:
Getestet habe ich mit 10000 (zehntausend) Clients.
Code:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
long Anzahl, Iterationen;
double Sekunden, Minuten, Stunden, DauerMsec;
long EndTime, NewTime;
double x=0,y=0,z=0;
EndTime = System.currentTimeMillis();
Anzahl = Long.parseLong(jTextField1.getText());
Iterationen = ((Anzahl-1)*Anzahl/2);
jTextField2.setText(Long.toString(Iterationen));
jTextField2.repaint();
jTextField3.setText( "... am rechnen ...");
jTextField3.repaint();
for (long i = 0; i < Iterationen; i++)
{
y = Math.sin(i);
x = Math.cos(y);
z = x * y;
}
NewTime = System.currentTimeMillis();
DauerMsec = (NewTime -EndTime);
jTextField3.setText(Double.toString(DauerMsec));
jTextField4.setText(Double.toString(DauerMsec/1000));
jTextField5.setText(Double.toString(DauerMsec/1000/60));
jTextField6.setText(Double.toString(DauerMsec/1000/60/60));
jTextField7.setText(Double.toString(z));
}
Meine Frage ist jetzt, warum dauert es mit Java sooo lange? Je größer i wird, desto länger braucht es.
Habe ich einen Fehler gemacht? Wie kann man sin und cos optimieren, kann ich für die langsamen Berechnungen auf c oder c++ ausweichen?
Im Endeffekt, soll das Teil sein eines Programms, das auf einen Server laufen soll. Die Aufgabenverteilung wird sein 1. viele sin/cos Berechnungen 2. viele Pakete an vielen Clients schicken 3. Datenbankzugriff.
Und bitte keine Flames oder so was, nur nackte Aufklärung, Java gefällt mir so oder so, auch wenn ich momentan den Weg über Processing gehe und pur Java da einbaue wo ich es brauche.
Danke!
Phil