Hi steffi,
hab nun lange versucht, herauszufinden, warum eines meiner import-scripte immer langsamer wird. nun scheine ich das time lag gefunden zu haben. es heißt str_replace(array())!
der erste durchgang geht schnell von statten. aber dann dauert es manchmal sogar 10x länger!
Weil str_replace() im ersten Durchgang alle "aaa" ersetzt hat, findet es in allen folgenden Durchgängen natürlich keine mehr. Wenn das Suchen intern zeitaufwändiger ist als das Ersetzen, könnte sich so der Zeitunterschied erklären.
hierzu das schlampig geschriebene demonstrationsbeispiel:
<?
set_time_limit(0);
$ts_=0;
$testa[]='aaaaaaaaaaaaaaaaaaaaaaaaa';
$testa[]='bbbbbbbbbbbbbbbbbbbbbbbbb';
$testa[]='ccccccccccccccccccccccccc';
$testa[]='aaaaaaaaaaaaaaaaaaaaaaaaa';
$testa[]='bbbbbbbbbbbbbbbbbbbbbbbbb';
$testa[]='ccccccccccccccccccccccccc';
$testa[]='aaaaaaaaaaaaaaaaaaaaaaaaa';
$testa[]='bbbbbbbbbbbbbbbbbbbbbbbbb';
$testa[]='ccccccccccccccccccccccccc';
$testa[]='aaaaaaaaaaaaaaaaaaaaaaaaa';
$testa[]='bbbbbbbbbbbbbbbbbbbbbbbbb';
$testa[]='ccccccccccccccccccccccccc';
for($i=0;$i<10000;$i++)
{
$ts=time();echo ".";flush();
for($j=0;$j<1000;$j++)
$test=str_replace('aaa','bbb',$testa);
$ts_=$ts_+(time()-$ts);
$ts=time();
if(bcmod($i,100)==0)
{
echo '<br>'.$ts_.'<br>';
$ts_=0;
}
}
?>was kann ich tun, damit jeder durchgang so schnell geht wie der erste?
In dem speziellen Fall: Bei jedem Ersetzvorgang ein Array bereitstellen, in dem so viele 'aaa' vorhanden sind wie $testa vor Beginn der Schleifen. Guckst du mal hier:
<?php
set_time_limit(0);
// nur zum Zeit-Messen ...
function calculate_runtime(
$time = FALSE // NUMERIC: Ein gültiger Zeitstempel
){
list($usec, $sec) = explode(' ', microtime());
if(FALSE === $time) return ( (float)$sec + (float)$usec ); // Startzeit zurueckgeben
if( !is_numeric($time) ) return( $this->return_error(E_WARNING, 'parameter has to be of NUMERIC type') );
return( (float)$sec + (float)$usec - $time ); // uebergebene Zeit von aktueller Zeit abziehen
}
$ts_=0;
$testa[]='aaaaaaaaaaaaaaaaaaaaaaaaa';
$testa[]='bbbbbbbbbbbbbbbbbbbbbbbbb';
$testa[]='ccccccccccccccccccccccccc';
$testa[]='aaaaaaaaaaaaaaaaaaaaaaaaa';
$testa[]='bbbbbbbbbbbbbbbbbbbbbbbbb';
$testa[]='ccccccccccccccccccccccccc';
$testa[]='aaaaaaaaaaaaaaaaaaaaaaaaa';
$testa[]='bbbbbbbbbbbbbbbbbbbbbbbbb';
$testa[]='ccccccccccccccccccccccccc';
$testa[]='aaaaaaaaaaaaaaaaaaaaaaaaa';
$testa[]='bbbbbbbbbbbbbbbbbbbbbbbbb';
$testa[]='ccccccccccccccccccccccccc';
$start = calculate_runtime();
for($i=0;$i<10000;$i++)
{
//$ts=time();echo "."; //flush();
for($j=0;$j<1000;$j++)
$testb = $testa;
$test=str_replace('aaa','bbb',$testb);
/*
$ts_=$ts_+(time()-$ts);
$ts=time();
if(bcmod($i,100)==0)
{
echo '<br>'.$ts_.'<br>';
$ts_=0;
}
//*/
}
printf('<hr />dauer(%s)', calculate_runtime($start) );
?>
MffG
EisFuX
Auch meine Hosenträger sind intelligent, in dem Sinne, dass man sie regulieren kann. Sie besitzen ein adaptives Verhalten.
Stanisław Lem
