Вы не зашли.
Главная »
PHP » Почему нечистется оперативная память?
#1.
TLENS
Off
(14)
Moderator
2010.02.09 22:10
Файл db.txt занимает 8 mb.
Выделил оперативки 20m.
Вощем запустил етот скрипт через пару секунд закончилась память.
Поставил на 100m.
Через несколько минут забилась и ета оперативка.
При етом наблюдая за процесом время генерации начиналось от 2 сек. и с каждим выболнением росло.
Пока не дошло до 30 сек. После забилось и 100м оперативы.
Я некое время подумал что надо розтавить unset() ухты время сбилось до одной секунды да и память очистилась.
Но при последующих выполнениях обратно наблюдается рост.
Вчем может быть проблема?
Я уже ниче не пойму. Почему скрипт работает неочищая памяти?
Код:
span style="color: #0000BB"><?phplist($generic_msec,$generic_sec)=explode(chr(32),microtime()); $generic_time=$generic_sec+$generic_msec;ini_set('memory_limit',"200M");//------------------------------------------------//$f='';$b='';$g=(int)$_GET['g'];$f=file('db.txt');$b=file('new.txt');/*$c=count($b);for($i<$c; $i>=($c-100); --$i){echo $b[$i].'<hr>';}exit; */for($i=$g; $i<($g+1000); ++$i){if(!in_array($f[$i],$b)){$b[]=$f[$i]; ++$z;}else{++$p;}}unset($f);$fp=fopen('new.txt','w');fputs($fp,implode($b));fclose($fp);unset($b);echo 'Ok! '.$z.'<hr>No '.$p.'<hr>page '.$g.'<hr><META HTTP-EQUIV="REFRESH" CONTENT="0; url=file.php?g='.($g+1000).'">';//------------------------------------------------//list($generic_newmsec,$generic_newsec)=explode(chr(32),microtime()); echo '<hr>'.round((($generic_newsec+$generic_newmsec)-$generic_time),4).' сек.<br>';exit; ?> |
Отредактировано TLENS (2010.02.10 06:06)
я вообще не понимаю что ты хочешь сделать этим кодом.
добавить в new.txt строки из db.txt ?
#3.
TLENS
Off
(14)
Moderator
2010.02.12 14:02
Ну да в db.txt ключи котые повторяются а в new.txt ключи перебранные и ниодин не повторяется.
Но я уже перебрал мне на дальнейше интиресно почему оперативная память неочищается?
ну во первых там db.txt вообще в массив считывать не нужно. ($g + 1000) выполняется при каждой итерации. не мудрено что памятьс таким кодом можеть потечь.
#5.
TLENS
Off
(14)
Moderator
2010.02.12 16:04
Нащет ($g + 1000) както не додул.
А вот нащет
не мудрено что памятьс таким кодом можеть потечь.
Непонял что ты хотел сказать.
Почему она может потечь, и как ето потечь?
И почему ненужно зчитывать в массив db.txt? Я другого способа невижу.
Отредактировано TLENS (2010.02.12 17:05)
#7.
TLENS
Off
(14)
Moderator
2010.02.13 05:05
Ну вот смотри
Код:
lt;?for($i=0; $i<1000; ++$i){$b[]=$f[$i];/* Почему здесь уходит память? Я же его пишу в массив И потом освобождаю память.*/} unset($b);?> |
Отредактировано TLENS (2010.02.13 05:05)
накладные расходы может. нужно смотреть исходники Zend Engine. И пробуй делать все на самых последних стабильных версиях. На данный момент 5.3.1
#9.
TLENS
Off
(14)
Moderator
2010.02.13 17:05
Ладно попробуем но поже.
Спассибо и на етом.
У меня такая проблема.
Получается слишком длинная строка (больше доступной оперативной памяти).
Периодически мне приходиться ее очищать, и записывать в сторонний источник.
Будет ли разница, при очистки вариантами
1. $var = null;
2. unset($var);
??
Натан ротшильд :
Кто владеет информацией, тот владеет миром