Проблемы с памятью

stanlee

Новичок
Проблемы с памятью

тестировал выборку очень большого колличесва записей из бд

сделал так
допустим в таблице 100000 записей
если их все вынуть то сработает блокировка на ограничение памяти

вынимаю по 100 записей в цикле к примеру

в цикле такой кусок

PHP:
$resource = mysql_query($query);
echo memory_get_usage()." ";
while($line = mysql_fetch_assoc($resource))
{
	$result[] = $line;
}

echo memory_get_usage()." ";

unset($resource, $result, $line, $query);

echo memory_get_usage() . "\n";
а вот что дает замер

54160 121024 58816
58816 171312 60992
60992 220560 62024
62024 270040 63680
63680 321816 63992
63992 371448 64048
64048 420744 64048
64048 470096 64048
64048 519408 64048
64112 572600 64112
64112 621728 64112
64112 670984 64112
64112 719968 64112
64112 769504 64112
64112 818760 64112
64112 868048 64112
64112 917920 64112
64112 967568 64112
64112 1016696 64112
64112 1074512 64112

ничего не понимаю я же сбрасываю после выборки инфу
а почему тогда растет память?
 

Alexandre

PHPПенсионер
в рнр нет реализации принудительной чистки мусора.

а по одной - ни как не обработать??
 

stanlee

Новичок
я и обрабатываю по 100 записей

вот весь цикл

PHP:
$pitch = 100;
$cur_cnt = 0;
$cycles = 100;

for ($i = 0; $i <= $cycles; $i++)
{
	$query = 'SELECT field FROM fields LIMIT '.$cur_cnt.', '.$pitch;
	$resource = mysql_query($query);
	echo memory_get_usage()." ";
	while($line = mysql_fetch_assoc($resource))
	{
		$result[] = $line;
	}
	echo memory_get_usage()." ";

	//mysql_free_result($resource);
	unset($resource, $result, $line, $query);

	$cur_cnt += 100;
	$pitch += 100;
	echo memory_get_usage() . "\n";
}
но память растет и все тут :(

-~{}~ 16.07.07 14:04:

упс :)
косяк в коде
при выборке у меня с каждым разом увеличивалось число выбираемых строк
а должно быдло быть неизменным - 100

что и приводило к росту памяти :rolleyes:

в общем сам виноват
удалите тему
 

Alexandre

PHPПенсионер
ну да, mysql_free_result() не делаешь,
массив с памятью не обнуляешь....

кстати поделись тестами, после этих изменений.
 

stanlee

Новичок
нет mysql_free_result непричем
все дело в $pitch += 100;

те выбока у меня идет каждый раз с шагом на 100
а я сдуру еще и количество выбираемых строк стал прибавлять

поэтому у меян выбиралось каждый раз
100
200
300 и тд строк

что и приводило к увеличению занимаемой памяти
 

Alexandre

PHPПенсионер
те выбока у меня идет каждый раз с шагом на 100
а я сдуру еще и количество выбираемых строк стал прибавлять
это понятно, когда устранил причину - с памятью все в порядке стало??
 
Сверху