Vergleich der Leistung von PHP-Variablenreferenzen und Nichtreferenzen

小云云
Freigeben: 2023-03-21 21:20:02
Original
1953 Leute haben es durchsucht

Dieser Artikel zeigt Ihnen hauptsächlich den Leistungsvergleich zwischen PHP-Variablenreferenzen und Nichtreferenzen. Ich hoffe, er kann Ihnen helfen.

<?php
// PREVIEW:数据需要修改的就用引用,数据不需要修改的就用非引用

$arrayCount = 2000;
$cycleCount = 100000;

// 向函数传递参数并做修改
echo "向函数传递参数并做修改", PHP_EOL;
function ByVal($p){return $p[intval(count($p) / 2)] += 1;}  
function ByRef(&$p){return $p[intval(count($p) / 2)] += 1;}

$p = array_fill(0, $arrayCount, 1);
$start = microtime(true);
$startMem = Memory_get_usage();
for($i = 0; $i < $cycleCount; $i += 1){
    $a = ByVal($p);
}
$end = microtime(true);
$endMem = Memory_get_usage();
echo &#39;ByValFun: &#39;, $end - $start, &#39;s&#39; , PHP_EOL, &#39;Mem: &#39;, $endMem - $startMem , PHP_EOL;

$start = microtime(true);
$startMem = Memory_get_usage();
for($i = 0; $i < $cycleCount; $i += 1){
    $a = ByRef($p);
}
$end = microtime(true);
$endMem = Memory_get_usage();
echo &#39;ByRefFun: &#39;, $end - $start, &#39;s&#39; , PHP_EOL, &#39;Mem: &#39;, $endMem - $startMem , PHP_EOL , PHP_EOL;
// END: 速度相近,内存引用胜出

// 向函数传递参数不做修改
echo "向函数传递参数不做修改", PHP_EOL;
function ByVal2($p){return $p[intval(count($p) / 2)];}  
function ByRef2(&$p){return $p[intval(count($p) / 2)];}

$p = array_fill(0, $arrayCount, 1);
$start = microtime(true);
$startMem = Memory_get_usage();
for($i = 0; $i < $cycleCount; $i += 1){
    $a = ByVal2($p);
}
$end = microtime(true);
$endMem = Memory_get_usage();
echo &#39;ByValFun: &#39;, $end - $start, &#39;s&#39; , PHP_EOL, &#39;Mem: &#39;, $endMem - $startMem , PHP_EOL;

$start = microtime(true);
$startMem = Memory_get_usage();
for($i = 0; $i < $cycleCount; $i += 1){
    $a = ByRef2($p);
}
$end = microtime(true);
$endMem = Memory_get_usage();
echo &#39;ByRefFun: &#39;, $end - $start, &#39;s&#39; , PHP_EOL, &#39;Mem: &#39;, $endMem - $startMem , PHP_EOL , PHP_EOL;
// END: 传值性能大幅胜出,内存相近

// 变量赋值做修改
echo "变量赋值做修改", PHP_EOL;
$start = microtime(true);
$startMem = Memory_get_usage();
for($i = 0; $i < $cycleCount; $i += 1){
    $p = array_fill(0, $arrayCount, 1);
    $a = $p;
    $a[2] += 1;
}
$end = microtime(true);
$endMem = Memory_get_usage();
echo &#39;ByVal: &#39;, $end - $start, &#39;s&#39; , PHP_EOL, &#39;Mem: &#39;, $endMem - $startMem , PHP_EOL;

$start = microtime(true);
$startMem = Memory_get_usage();
for($i = 0; $i < $cycleCount; $i += 1){
    $p = array_fill(0, $arrayCount, 1);
    $a = &$p;
    $a[2] += 1;
}
$end = microtime(true);
$endMem = Memory_get_usage();
echo &#39;ByRef: &#39;, $end - $start, &#39;s&#39; , PHP_EOL, &#39;Mem: &#39;, $endMem - $startMem , PHP_EOL , PHP_EOL;
// END 速度相近,引用略胜;内存引用大幅胜出

// 变量赋值不做修改
echo "变量赋值不做修改", PHP_EOL;
$start = microtime(true);
$startMem = Memory_get_usage();
for($i = 0; $i < $cycleCount; $i += 1){
    $p = array_fill(0, $arrayCount, 1);
    $a = $p;
    $b = $a[2];
}
$end = microtime(true);
$endMem = Memory_get_usage();
echo &#39;ByVal: &#39;, $end - $start, &#39;s&#39; , PHP_EOL, &#39;Mem: &#39;, $endMem - $startMem , PHP_EOL;

$start = microtime(true);
$startMem = Memory_get_usage();
for($i = 0; $i < $cycleCount; $i += 1){
    $p = array_fill(0, $arrayCount, 1);
    $a = &$p;
    $b = $a[2];
}
$end = microtime(true);
$endMem = Memory_get_usage();
echo &#39;ByRef: &#39;, $end - $start, &#39;s&#39; , PHP_EOL, &#39;Mem: &#39;, $endMem - $startMem , PHP_EOL , PHP_EOL;
// END 速度相近,内存相近

// 数组内循环赋值修改数据
echo "数组内循环赋值修改数据", PHP_EOL;
$start = microtime(true);
$startMem = Memory_get_usage();
for($i = 0; $i < $cycleCount; $i += 1){
    $p = array_fill(0, $arrayCount, 1);
    foreach($p as $key => $val){
        $p[$key] += 1;
    }
}
$end = microtime(true);
$endMem = Memory_get_usage();
echo &#39;ByKey: &#39;, $end - $start, &#39;s&#39; , PHP_EOL, &#39;Mem: &#39;, $endMem - $startMem , PHP_EOL;

$start = microtime(true);
$startMem = Memory_get_usage();
for($i = 0; $i < $cycleCount; $i += 1){
    $p = array_fill(0, $arrayCount, 1);
    foreach($p as &$val){
        $val += 1;
    }
}
$end = microtime(true);
$endMem = Memory_get_usage();
echo &#39;ByRef: &#39;, $end - $start, &#39;s&#39; , PHP_EOL, &#39;Mem: &#39;, $endMem - $startMem , PHP_EOL , PHP_EOL;
// END: 引用胜出

// 数组内循环赋值不修改数据
echo "数组内循环赋值不修改数据", PHP_EOL;
$start = microtime(true);
$startMem = Memory_get_usage();
for($i = 0; $i < $cycleCount; $i += 1){
    $p = array_fill(0, $arrayCount, 1);
    foreach($p as $key => $val){
        $b = $val;
    }
}
$end = microtime(true);
$endMem = Memory_get_usage();
echo &#39;ByKey: &#39;, $end - $start, &#39;s&#39; , PHP_EOL, &#39;Mem: &#39;, $endMem - $startMem , PHP_EOL;

$start = microtime(true);
$startMem = Memory_get_usage();
for($i = 0; $i < $cycleCount; $i += 1){
    $p = array_fill(0, $arrayCount, 1);
    foreach($p as &$val){
        $b = $val;
    }
}
$end = microtime(true);
$endMem = Memory_get_usage();
echo &#39;ByRef: &#39;, $end - $start, &#39;s&#39; , PHP_EOL, &#39;Mem: &#39;, $endMem - $startMem , PHP_EOL;
// END: 传值胜出

// 总结:数据需要修改的就用引用,数据不需要修改的就用非引用
Nach dem Login kopieren

Verwandte Empfehlungen:

Detaillierte Erläuterung der drei Referenzbeispielcodes der PHP-Variablenreferenz, Funktionsreferenz und Objektreferenz

PHP-Variablenreferenz, Funktionsreferenz, Objektreferenz

PHP-Variablenreferenz PHP-Globalvariable

Das obige ist der detaillierte Inhalt vonVergleich der Leistung von PHP-Variablenreferenzen und Nichtreferenzen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!