for schleife 1.000.000 zählen !!

mageDSA

Mitglied
Hallo

Ich experimentier ein bissl in php mit schleifen und dergleichen.

Und mein Ziel ist raufzählen oder runterzählen.

Hier ein kleines Beispiel

PHP:
<HTML>
<HEAD>
<TITLE>php learning</TITLE>
</HEAD>
<BODY bgcolor="#FFFFFF">
<?php    for($i=0; $i<1000000; $i++)
{ 
echo("".$i."<br />");
}
 ?>
</BODY>
</HTML>

Sehr einfach zu erkennen daß man hier bis zu 1Million raufzählt.
Nur das Problem ist das er sehr langsam zählt.
Hundert Tausend hat er sehr schnell so ca 2. Sekunden.
Aber bei 1.Million reagiert er nur mehr sehr langsam.
Theorethisch müsste er es ja in 20 Sekunden locker schaffen
tut er aber nicht.
Meine Maschine ist ein Pentium 3 800 256 MB.

Meine Frage wie kann ich das anders machen daß das nur so flutscht.

Danke

:-)
 
Nun auch wenn deine Maschiene 50 mal schneller währe, es würde nicht viel schneller werden.

Grund ist:
nicht das zählen verbraucht die zeit:
sondern das Schreiben in den Outputstream, sprich die ausgabe in den Outputstream, dann muss das ganze noch an deinen Browser transferiert werden und dieser muss das ganze noch raendern.
schreib mal um in:

PHP:
$a=0;
while(true)
{ 
 $a++;
 if($a==1000000)
            break;
}
echo "Fertig!";

dürfte rasend schnell gehen ;)
 
Hallo Chris.

Dann scriptl flutscht super. 4 Sekunden braucht er für 1 Million

Nur seh ich keinen Output :-) nur fertig.

Frage ist das möglich auch den outputstream wie du es so schön umschreibst hinzubekommen ?

:-)

Ich habs mal probiert das ich zumindest den Endwert bekomme.

PHP:
<HTML>
<HEAD>
<TITLE>php learning</TITLE>
</HEAD>
<BODY bgcolor="#FFFFFF">
<?

$a=0;
while(true)
{ 
 $a++;
 if($a==1000000)
            break;
}
echo "Fertig! bis "; echo "$a "; echo "gezählt";

 ?>
</BODY>
</HTML>
 
Zuletzt bearbeitet:
Servus!

Könntest das alles in einen Puffer (z.Bsp. ein Array) schreiben und diesen dann mit der entsprechenden asugabe Methode nach dem "Zählen" ausgeben ... so wierd der Ausgabestrom nur einmal benutzt ...

Gruss Tom
 
@Tom

Klingt einleuchtend zwar keinen Plan von Arrays aber schon mal ein Hinweis wo ich ansetzen muss :-)

Vielen Dank Chris und Tom
 
ja ists möglich aber das kostet immer Zeit.
Ich habs mal eben mit ruby gemacht, 0.5 sec braucht ruby.

---------------------
a =0
0.upto(1000000) {|x| a = x }
puts "fertig auf #{a}"
---------------------
Ohne output = 0,5 sec

---------------------
a = 0
0.upto(1000000) {|x| a = x
puts x
}
---------------------
Mit output = 68 sec

Das schreiben der zahl ist also extrem langsamer, als das reine zählen.

Das ist in allen Sprachen so.
Umso schneller die Sprache um so extremer wird das. Wenn mann den Test noch mit einer Compilierten Sprache wie
C durchführt wird das ergebnis noch viel krasser.
Ich rechne mal mit 0.01 sec zählen und ebenso 68 sec mit output.
Es hängt einfach an einer ausgabe eine menge an operationen die durchgefuehrt werden muessen.
 
Zurück