On Sep 29, 2009, at 3:23 PM, Philip Thompson wrote:
On Sep 29, 2009, at 3:07 PM, jeff brown wrote:
Philip Thompson wrote:
On Sep 28, 2009, at 4:40 PM, jeff brown wrote:
Yes, that's the best way to clean up after yourself. And you
really should use that on anything you have sitting around daemon
like.
Jeff
Philip Thompson wrote:
On Sep 28, 2009, at 4:27 PM, Ralph Deffke wrote:
well this sound clearly to me like you are not freeing
resultsets you are not going to use anymore. In long scripts
you have to take care of this. on short scripts you can be a
bit weak on that, because the resultsets are closed and freed
on script ending.
assumed u r using MySQL are u using mysql_free_result($result)
goog luck
ralph_deffke@xxxxxxxx
"Philip Thompson" <philthathril@xxxxxxxxx> wrote in message news:9C0B9C4C-5E64-4519-862B-8A3E1DA4DE4C@xxxxxxxxx
...
Hi all.
I have a script that opens a socket, creates a persistent mysql
connection, and loops to receive data. When the amount of
specified
data has been received, it calls a class which processes the
data and
inserts it into the database. Each iteration, I unset/destruct
that
class I call. However, the script keeps going up in memory and
eventually runs out, causing a fatal error. Any thoughts on
where to
start to see where I'm losing my memory?
Thanks in advance,
~Philip
I am not using mysql_free_result(). Is that highly recommended
by all?
Thanks,
~Philip
I took your suggestions and made sure to clean up after myself.
I'm running into something that *appears* to be a bug with
mysql_free_result(). Here's a snippet of my db class.
<?php
class db {
function fetch ($sql, $assoc=false)
{
echo "\nMemory usage before query: " . number_format
(memory_get_usage ()) . "\n";
$resultSet = $this->query($sql);
echo "Memory usage after query: " . number_format
(memory_get_usage ()) . "\n";
if (!$assoc) { $result = $this->fetch_row($resultSet); }
else {
$result = $this->fetch_array($resultSet);
echo "Memory usage after fetch: " . number_format
(memory_get_usage ()) . "\n";
}
/*
$this->freeResult($resultSet);
*/
mysql_free_result($resultSet);
echo "Memory usage after free: " . number_format
(memory_get_usage ()) . "\n";
return $result;
}
function freeResult ($result)
{
if (is_resource ($result)) {
if (!mysql_free_result ($result)) { echo "Memory could
not be freed\n"; }
}
unset ($result); // For good measure
}
function fetch_row ($set) {
return mysql_fetch_row ($set);
}
function fetch_array ($set) {
return mysql_fetch_array ($set, MYSQL_ASSOC);
}
}
// I seem to be losing memory when I call this
$db->fetch($sql);
?>
The result I get with this is...
Memory usage before query: 6,406,548
Memory usage after query: 6,406,548
Memory usage after fetch: 6,406,548
Memory usage after free: 6,406,572
As you may notice, the memory actually goes UP after the *freeing*
of memory. Why is this happening?! What have I done wrong? Is this
a bug? Any thoughts would be appreciated.
Thanks,
~Philip
try the above...
jeff
Unfortunately, the same result:
Memory usage before query: 6,524,676
Memory usage after query: 6,524,676
Memory usage after fetch: 6,524,676
Memory usage after free: 6,524,700
Memory usage before query: 6,524,792
Memory usage after query: 6,524,792
Memory usage after fetch: 6,524,792
Memory usage after free: 6,524,816
Memory usage before query: 6,524,932
Memory usage after query: 6,524,932
Memory usage after fetch: 6,524,932
Memory usage after free: 6,524,956
Each iteration shows a 24 byte difference between fetching the array
and freeing the result. Thoughts? This is baffling to me.
Thanks,
~Philip
I did a little searching and found this article:
http://www.ibm.com/developerworks/opensource/library/os-php-v521/
He gives the same example I do with mysql_free_result() not
appropriately freeing the memory. He concludes with "we can assume
that mysql_query() is allocating memory incorrectly." However, he
never explains his thoughts on why or anything else. Thanks, Tracy.
So am I chasing a tangent? Should my focus be moved to mysql_query()
instead? Thoughts?
Thanks,
~Philip
PS... Yes, this is giving me a headache.
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php