Вы не зашли.
Главная » PHP » Почему нечистется оперативная память?
#1. TLENS Off (14)
Moderator
2010.02.10 01:01
Файл 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 09:09)
#2. Gemorroj Off (107)
Administrator
2010.02.10 12:12
я вообще не понимаю что ты хочешь сделать этим кодом.
добавить в new.txt строки из db.txt ?
#3. TLENS Off (14)
Moderator
2010.02.12 17:05
Ну да в db.txt ключи котые повторяются а в new.txt ключи перебранные и ниодин не повторяется.
Но я уже перебрал мне на дальнейше интиресно почему оперативная память неочищается?
#4. Gemorroj Off (107)
Administrator
2010.02.12 18:06
ну во первых там db.txt вообще в массив считывать не нужно. ($g + 1000) выполняется при каждой итерации. не мудрено что памятьс таким кодом можеть потечь.
#5. TLENS Off (14)
Moderator
2010.02.12 19:07
Нащет ($g + 1000) както не додул.
А вот нащет
не мудрено что памятьс таким кодом можеть потечь.
Непонял что ты хотел сказать.
Почему она может потечь, и как ето потечь?
И почему ненужно зчитывать в массив db.txt? Я другого способа невижу.
Отредактировано TLENS (2010.02.12 20:08)
#6. Gemorroj Off (107)
Administrator
2010.02.12 20:08
http://ru.wikipedia.org/wiki/Утечка_памяти
#7. TLENS Off (14)
Moderator
2010.02.13 08:08
Ну вот смотри
Код:
lt;?for($i=0; $i<1000; ++$i){$b[]=$f[$i];/* Почему здесь уходит память? Я же его пишу в массив И потом освобождаю память.*/} unset($b);?>
Отредактировано TLENS (2010.02.13 08:08)
#8. Gemorroj Off (107)
Administrator
2010.02.13 11:11
накладные расходы может. нужно смотреть исходники Zend Engine. И пробуй делать все на самых последних стабильных версиях. На данный момент 5.3.1
#9. TLENS Off (14)
Moderator
2010.02.13 20:08
Ладно попробуем но поже.
Спассибо и на етом.
#10. Morgan Off (10)
Участник
2010.02.13 22:10
У меня такая проблема.
Получается слишком длинная строка (больше доступной оперативной памяти).
Периодически мне приходиться ее очищать, и записывать в сторонний источник.
Будет ли разница, при очистки вариантами
1. $var = null;
2. unset($var);
??
Натан ротшильд :
Кто владеет информацией, тот владеет миром
Страниц: 1 2 Все
Главная
WEB
PunBB Mod v0.6.2
0.018 s