Perfomance Problem

  • Themenstarter Themenstarter i125
  • Beginndatum Beginndatum
Hallo,


Laufzeit .... dauert ewigkeiten... wie kommt ihr auch 3-6 Sekunden? 40Ghz Prozessor
Ich muss die Keys ja auch ausgeben... wat geht denn da schneller? In ne TXT Datei schreiben, oder Ausgabe auf dem Bildschirm?

PHP:
function randStringINTEGER($length)
{
    $chars = '1234567890';
    $strlen = strlen($chars);
    $str = '';
    for( $i=0; $i<$length; $i++ ) {
        $str .= $chars{rand(0, $strlen - 1)};
    }
    return $str;
}

function randStringALPHA($length)
{
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMOPQRSTUVWXYZ';
    $strlen = strlen($chars);
    $str = '';
    for( $i=0; $i<$length; $i++ ) {
        $str .= $chars{rand(0, $strlen - 1)};
    }
    return $str;
}


$array = array();
$i = 0;
while( $i<100000) {
    $randString = randStringALPHA(3).randStringINTEGER(3);
    if( !isset($array[$randString])) {
        $array[$randString] = $randString;
        $i++;
       echo $randString."<br>";
		}
}
 
Die randStringINTEGER()-Funktion kannst du durch die einfach rand()-Funktion ersetzen:
PHP:
str_pad(rand(0, 999), 3, '0', STR_PAD_LEFT)

Wozu benötigst du das Ganze überhaupt?
 
Hallo saila,

kannst du mir gerade deinen Code posten? Bei mir rödelt der sich zu tode? Ich verstehs nicht.

CPU, 3,8GHZ
512MB Hauptspeicher
Leider WinXP

Bei mir ca. 15min und bricht dann ab... was mach ich den Falsch? Bedigung war ja: das jeder Key nicht doppelt vor kommt.

Gruss

Alex
 
Es ist im dein Code von oben:

Code:
function randStringINTEGER($length)
{
    $chars = '1234567890';
    $strlen = strlen($chars);
    $str = '';
    for( $i=0; $i<$length; $i++ ) {
        $str .= $chars{rand(0, $strlen - 1)};
    }
    return $str;
}

function randStringALPHA($length)
{
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMOPQRSTUVWXYZ';
    $strlen = strlen($chars);
    $str = '';
    for( $i=0; $i<$length; $i++ ) {
        $str .= $chars{rand(0, $strlen - 1)};
    }
    return $str;
}


$array = array();
$i = 0;
while( $i<100000) {
    $randString = randStringALPHA(3).randStringINTEGER(3);
    if( !isset($array[$randString])) {
        $array[$randString] = $randString;
        $i++;
       echo $randString."<br />";
        }
}

Mehr nicht.
 
Hallo Gumbo,

unser Firma macht für einen Kunden ein Gewinnspiel, dazu müssen 100.000 Schlüssel generiert werden. Ich habs halt erstmal in PHP geschrieben, weil ich hier keine andere Entwicklungsumgebung habe.

Daher brauch ich ne Ausgabe in Form einer txt Datei, die dann an die Druckerrei geschickt wird. Leider muss der bis 16Uhr MAXIMAL 17 Uhr fertig sein.

... Ausgabe also entweder auf Bildschirm oder in ne TXT...

Gruss

Alex

Hätte ich Linux, würde ich es in C++ schreiben.... leider nur Windows am start ;-(
 
Was für eine Art Gewinnspiel ist das denn? Wenn es ein Online-Gewinnspiel ist, würde ich die Gewinncodes länger machen, damit ein Erraten eines Gewinncodes schwieriger wird.
 
Hallo zusammen,

im unteren Teil der laufende Code.

Ja, auf Windows kann man mit C++ programmieren, aber ich hatte nun mal gerade 2h Zeit, davon ging halt knapp 1h in PHP drauf... C runterladen und mal gerade installieren kostet auch Zeit... ich sachs ja, ich steig auf Linux um, da gibts ein gcc Compiler. Thema rum.

Ich danke euch erstmal gaannnzz herzlich für eure Hilfestellung. Wirklich Danke... eigentlich müßte ich euch ein Bier ausgeben :-)

Grüße Alexander

Hier der Code:

Laufzeit: 3sec
Maschine: 4xXeonIII mit 700Mhz + 6GB RAM

PHP:
<?PHP
function randStringINTEGER($length)
{
    $chars = '1234567890';
    $strlen = strlen($chars);
    $str = '';
    for( $i=0; $i<$length; $i++ ) {
        $str .= $chars{rand(0, $strlen - 1)};
    }
    return $str;
}

function randStringALPHA($length)
{
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMOPQRSTUVWXYZ';
    $strlen = strlen($chars);
    $str = '';
    for( $i=0; $i<$length; $i++ ) {
        $str .= $chars{rand(0, $strlen - 1)};
    }
    return $str;
}

function rswrite($para)
{
	$datei = "output.txt";
	$fp = fopen($datei,"a+");
	fwrite($fp,$para."\n");
	fclose($fp);
}

$array = array();
$i = 0;
while( $i<100250) {
    $temp = randStringALPHA(3).randStringINTEGER(3);
    $randString=$temp{0}.$temp{1}.$temp{3}.$temp{2}.$temp{5}.$temp{4};
		if( !isset($array[$randString])) {
        $array[$randString] = $randString;
        $i++;
         rswrite($para=$randString);
   }
}
 
Zurück