Hallo,
habe den folgenden Test gemacht:
Ausgabe:
Es wird auf unterschiedliche Weise zwei mal ein Array mit identischen Inhalt erzeugt. Der Beweis das die Arrays test und test2 identisch sind zeigt die Ausgabe Zeile 18 (true).
Interessant ist der Speicherbedarf (in Klammern akt.Wert/Spitze). Für das Array mit der Zuweisung '97c2ca84-bcfe-4618-b8a3-4d404eead37a0'; steigt der Bedarf von 484k -> 1001k.
Das Array test2 wird "berechnet". $i%1 ist jedoch immer 0. Dennoch ist der Speicherbedarf bedeutend höher (1000k -> 2142k).
Meine Vermutung ist, das im Fall vom Array test PHP erkennt das alle Elemente identisch sind und das Array ganz anders speichert.
Werden die Zuweisungen getauscht (auskommentiert) dreht sich das Verhalten um. Dann benötigt test mehr Speicher als test2. Sozusagen der Beweis das die Reihenfolge der Array-Erzeugung dafür nicht verantwortlich ist.
Ebenfalls interessant das mit dem Löschen der Arrays der aktuelle Speicherbedarf wieder auf den Startwert geht.
habe den folgenden Test gemacht:
PHP-Code:
<?php
require __DIR__."/../class/class.debug.php";
debug::systeminfo()."<br>";
$test = $test2 = [];
debug::write();
for ($i = 0; $i < 10000; $i++) {
$test[] = '97c2ca84-bcfe-4618-b8a3-4d404eead37a0';
//$test[] = '97c2ca84-bcfe-4618-b8a3-4d404eead37a'.$i%1;
}
debug::write($test === $test2);
debug::write();
for ($i = 0; $i < 10000; $i++) {
$test2[] = '97c2ca84-bcfe-4618-b8a3-4d404eead37a'.$i%1;
//$test2[] = '97c2ca84-bcfe-4618-b8a3-4d404eead37a0';
}
debug::write($test === $test2);
$test = $test2 = [];
debug::write();
[20.10.2020 19:53:42,968](485k/687k) Debug::write "class.debug.php" Line 393 <="arraymem.php" Line 4 Debug :: systeminfo() | ||
0 | string(24) ASCII | "WINNT PHP 7.4.2 (64Bit) " |
[20.10.2020 19:53:42,968][+96 μs](484k/687k) Debug::write "arraymem.php" Line 6 |
[20.10.2020 19:53:42,968][+432 μs](1001k/1002k) Debug::write "arraymem.php" Line 11 | ||
0 | boolean | false |
[20.10.2020 19:53:42,968][+69 μs](1000k/1003k) Debug::write "arraymem.php" Line 13 |
[20.10.2020 19:53:42,969][+1194 μs](2142k/2143k) Debug::write "arraymem.php" Line 18 | ||
0 | boolean | true |
[20.10.2020 19:53:42,969][+119 μs](484k/2144k) Debug::write "arraymem.php" Line 20 |
Interessant ist der Speicherbedarf (in Klammern akt.Wert/Spitze). Für das Array mit der Zuweisung '97c2ca84-bcfe-4618-b8a3-4d404eead37a0'; steigt der Bedarf von 484k -> 1001k.
Das Array test2 wird "berechnet". $i%1 ist jedoch immer 0. Dennoch ist der Speicherbedarf bedeutend höher (1000k -> 2142k).
Meine Vermutung ist, das im Fall vom Array test PHP erkennt das alle Elemente identisch sind und das Array ganz anders speichert.
Werden die Zuweisungen getauscht (auskommentiert) dreht sich das Verhalten um. Dann benötigt test mehr Speicher als test2. Sozusagen der Beweis das die Reihenfolge der Array-Erzeugung dafür nicht verantwortlich ist.
Ebenfalls interessant das mit dem Löschen der Arrays der aktuelle Speicherbedarf wieder auf den Startwert geht.
Kommentar