On Mon, 2006-08-14 at 18:35 -0400, Adam Zey wrote: > > Further experimentation shows that the problem only occurs if the > variable being count'd is a static variable inside a function. Of > course, the original point still stands, static or no, count shouldn't > make a copy. Here is a sample script that I can confirm reproduces the > issue: > > <?php > > use_mem(); > > function use_mem() > { > static $foo = ""; > > for ( $x=0; $x <= 70000; $x++ ) > $foo[] = "BwaHA" . mt_rand(0, 1000000); > > echo memory_get_usage(); > $numrows = count($foo); > } > > ?> > > PHP's default memory limit is 8MB. This script creates an array that's > about 5.5MB. That part's fine. But it fails on that last line with the > count($foo). > > I realize that this particular function doesn't need the variable to be > static, but it's just a demonstration. My actual script had a function > that needed some data to be read in from a file into an array. Rather > than reading it in in the main script and passing it to the function, or > having the function read the data in every execution, I simply made > the variable static and had the function check if the variable was empty > to see if it was the first time the function had been called. > > Sorry for not realizing that the static variable is the key to > reproducing this issue. Does the script that I've pasted here give you > any better luck in reproducing? Yep looks like a bug or a design choice based on static variables. I'm not sure what the reasoning is, but it sounds like static vars currently take a huge performance hit when containing large chunks of memory :/ I just tested your code using is_array() and got the same failure. Cheers, Rob. -- .------------------------------------------------------------. | InterJinn Application Framework - http://www.interjinn.com | :------------------------------------------------------------: | An application and templating framework for PHP. Boasting | | a powerful, scalable system for accessing system services | | such as forms, properties, sessions, and caches. InterJinn | | also provides an extremely flexible architecture for | | creating re-usable components quickly and easily. | `------------------------------------------------------------' -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php