ID:               46018
 User updated by:  jimmycnw at gmail dot com
 Reported By:      jimmycnw at gmail dot com
 Status:           Open
 Bug Type:         Performance problem
 Operating System: Linux
 PHP Version:      5.2.6
 New Comment:

Execute SAVING part first, in separate script. Then execute LOADING in
another script. DO it separately, not in one script.


Previous Comments:
------------------------------------------------------------------------

[2008-09-07 15:31:07] jimmycnw at gmail dot com

Description:
------------
The code is attached. Try executing 'SAVING' first. It will create a
file 'temp.txt' approximately 450Kb in size. Then execute 'LOADING'. You
will see, that over 3.5Mb (!!) of memory used in unserialize() function,
while there are just 450Kb of data.

Is it a bug in PHP? Any suggestions on how to fix it?

(When I do the same with string, not array, everything works fine. The
problem appears only when I use nested arrays)



Reproduce code:
---------------
define ('FILENAME', 'temp.txt');
define ('SIZE', 10 * 1024);

// SAVING
$array = array ();
for ($i = 0; $i<SIZE; $i++)
        $array[] = array (uniqid ($i) => array ());
$data = serialize ($array);
file_put_contents (FILENAME, $data);

// LOADING
$before = memory_get_usage ();
$array = unserialize (file_get_contents (FILENAME));
$after = memory_get_usage ();
echo 'Memory used: '.($after-$before).' bytes, while size of data:
'.strlen (serialize ($array));


Expected result:
----------------
Memory used should be around 450Kb, while I see 3.5Mb.

Actual result:
--------------
Memory used: 3.5Mb


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=46018&edit=1

Reply via email to