Hallo,
ich benutze die Funktionen IPS_GetLinkList und IPS_GetLink um in einem Skript Links zu verstecken. Leider erhalte ich neuerdings (wahrscheinlich weil sich bei mir die Anzahl der Links erhöht hat) einen Speicherüberlauf:
<b>Fatal error</b>: Allowed memory size of 33554432 bytes exhausted (tried to allocate 73 bytes) in <b>C:\IP-Symcon\modules\IPSymconDenon\DenonClass.php</b> on line <b>296</b><br />
Mir scheint es hier zu einem Speicherwachstum zu kommen.
Ein Beispielskript
GetLinked_SetHidden(47111, false);
GetLinked_SetHidden(47112, false);
function GetLinked_SetHidden($VariablenID, $Value=True){
$Result = false;
echo 'Memory Start: '.memory_get_usage().PHP_EOL;
echo 'Anzahl Links: '.count(IPS_GetLinkList()).PHP_EOL;
foreach(IPS_GetLinkList() as $LinkID){
$TargetID = IPS_GetLink($LinkID)['TargetID'];
If ($TargetID == $VariablenID){
IPS_SetHidden($TargetID, $Value);
$Result = true;
}
}
echo 'Memory Ende: '.memory_get_usage().PHP_EOL.PHP_EOL;
return $Result;
zeigt folgende Ausgabe:
Memory Start: 1759440
Anzahl Links: 1742
Memory Ende: 3088688
Memory Start: 3088688
Anzahl Links: 1742
Memory Ende: 4417808
Der Speicher wächst sowohl innerhalb der Funktion als auch beim wiederholten Funktionsaufruf. Leider fällt mir keine Umgehungsmöglichkeit ein.
Gruß
Burkhard