Re: too slow to unset big array (after mem fragment)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 19 Jan 2005 16:28:21 -0700, kjohnson@xxxxxxxxxxx
<kjohnson@xxxxxxxxxxx> wrote:
> 
> A question from another naive reader.
> 
> Have you tried re-setting the array to an empty one, using array(),
> instead of using unset()?
indeed!, unset($arr); $arr = array();
or $arr = array(); directly
it's same :(
> 
> Kirk
> 




On Wed, 19 Jan 2005 14:44:10 -0800 (PST), Richard Lynch <ceo@xxxxxxxxx> wrote:
> 
> Just some ideas from a naive reader:
> 
> 1. unset() more often
i'm tracking ip of visiters to avoid double trigger of the counter.
if i shorten time to 5mins, therere so many ppl revisit after 5mins,
which give counter more points
> 2. unset() only a portion of the elements of the array
i guess so, but ..
> 
> You may even want to store a TIME element, and only unset() the "old"
> items or something.
i did, but it double the size, and scan of expired elements is slower
> 
> You may also want to, perhaps, put the unset() of older data inside your
> socket listening/reading loop, so that you are unset-ing the really old
> stuff as you read the new stuff, to always keep your array "small" in
> size.
> 
> --
> Like Music?
> http://l-i-e.com/artists.htm
> 
> 
and i'm not unseting the new items
here's the logic After the slow TIME element scanning scheme:
data flow:
incomming->currentTracker->oldTracker
for .... {
$key = ...
$track = &$currentTracker[$countername][$key][$id];
if isset($currentTracker[$countername][$key][$id]):
 $tarck ++;
 continue; // skip trigger
elif isset($oldTracker[$countername][$key][$id]):
 $track = $oldTracker[$countername][$key][$id] + 1;
 continue; // skip trigger
$counts[$key] ++; // trigger, will save later
} // end for
unset($track);
expiring:
foreach 1hour:
1. unset($oldTracker); // slow
2. $oldTracker = $currentTracker; // fast, this is COW(no copy)
3. $currentTracker = array(); // fast (no efree)
if u think 2/3 is slow, i can do:
2. $oldTracker = &$currentTracker; // fast, php-reference
3. unset($currentTracker); // php-unreference
3. $currentTracker = array(); // fast
if i have to unset portion of the $oldTracker. i have to scan? or any other way?

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux