Allowed memory size of 33554432 bytes exhausted

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

Probier das mal: PHP: gc_collect_cycles - Manual

paresy

Bringt leider keine signifikante Besserung (<200 Byte).

Gruß

Burkhard

Das ist ja sehr sehr kurios. Bisher habe ich noch keine Idee. Mit PHP 7 ist der Fehler übrigens nicht da…

paresy

Ist jetzt nicht soooo wichtig. Soll ich einfach auf PHP 7 warten?

Gruß

Burkhard

Wenn möglich ja - ich habe echt keine Idee woher dieser enorme Speicherverbrauch kommt!

paresy