• Главная
  • » PHP
  • » Почему нечистется оперативная память?

#1 2010.02.10 01:14

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Почему нечистется оперативная память?

Файл db.txt занимает 8 mb.
Выделил оперативки 20m.
Вощем запустил етот скрипт через пару секунд закончилась память.
Поставил на 100m.
Через несколько минут забилась и ета оперативка.
При етом наблюдая за процесом время генерации начиналось от 2 сек. и с каждим выболнением росло.
Пока не дошло до 30 сек. После забилось и 100м оперативы.
Я некое время подумал что надо розтавить unset() ухты время сбилось до одной секунды да и память очистилась.
Но при последующих выполнениях обратно наблюдается рост.
Вчем может быть проблема?
Я уже ниче не пойму. Почему скрипт работает неочищая памяти?

Код:

1
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:51)

Неактивен

#2 2010.02.10 12:23

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Почему нечистется оперативная память?

я вообще не понимаю что ты хочешь сделать этим кодом.
добавить в new.txt строки из db.txt ?

Неактивен

#3 2010.02.12 17:20

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Почему нечистется оперативная память?

Ну да в db.txt ключи котые повторяются а в new.txt ключи перебранные и ниодин не повторяется.
Но я уже перебрал мне на дальнейше интиресно почему оперативная память неочищается?

Неактивен

#4 2010.02.12 18:02

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Почему нечистется оперативная память?

ну во первых там db.txt вообще в массив считывать не нужно. ($g + 1000) выполняется при каждой итерации. не мудрено что памятьс таким кодом можеть потечь.

Неактивен

#5 2010.02.12 19:57

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Почему нечистется оперативная память?

Нащет ($g + 1000) както не додул.
А вот нащет

не мудрено что памятьс таким кодом можеть потечь.

Непонял что ты хотел сказать.
Почему она может потечь, и как ето потечь?
И почему ненужно зчитывать в массив db.txt? Я другого способа невижу.

Отредактировано TLENS (2010.02.12 20:33)

Неактивен

#6 2010.02.12 20:12

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Почему нечистется оперативная память?

Неактивен

#7 2010.02.13 08:00

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Почему нечистется оперативная память?

Ну вот смотри

Код:

1
lt;?for($i=0; $i<1000; ++$i){$b[]=$f[$i];/* Почему здесь уходит память? Я же его пишу в массив И потом освобождаю память.*/} unset($b);?>

Отредактировано TLENS (2010.02.13 08:05)

Неактивен

#8 2010.02.13 11:24

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Почему нечистется оперативная память?

накладные расходы может. нужно смотреть исходники Zend Engine. И пробуй делать все на самых последних стабильных версиях. На данный момент 5.3.1

Неактивен

#9 2010.02.13 20:03

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Почему нечистется оперативная память?

Ладно попробуем но поже.
Спассибо и на етом.

Неактивен

#10 2010.02.13 22:02

Morgan
Участник
Зарегистрирован: 2009.03.31
Сообщений: 333
Карма: 10
Профиль Веб-сайт

Re: Почему нечистется оперативная память?

У меня такая проблема.
Получается слишком длинная строка (больше доступной оперативной памяти).
Периодически мне приходиться ее очищать, и записывать в сторонний источник.
Будет ли разница, при очистки вариантами
1. $var = null;
2. unset($var);
??


Натан ротшильд :
Кто владеет информацией, тот владеет миром

Неактивен

  • Главная
  • » PHP
  • » Почему нечистется оперативная память?

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.011 s