第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有一種內(nèi)存有效的方法來連接 PHP 中的變量?

有沒有一種內(nèi)存有效的方法來連接 PHP 中的變量?

PHP
手掌心 2021-11-13 16:58:47
我有一個超過內(nèi)存限制的 PHP 腳本。我一直在增加內(nèi)存,ini_set但我已經(jīng)達到了物理極限。所以我寧愿修復代碼也不愿添加更多內(nèi)存。這是循環(huán)中的違規(guī)行:$values_string .= $values . ',';$values 總是相同長度的 77 個字符(當然是不同的)。所以我在做的時候讀到 PHPconcat實際上創(chuàng)建了第三個變量。我希望避免不必要的臨時變量創(chuàng)建。此外,這是在 40,000 次迭代循環(huán)中。有沒有辦法避免混亂堆積(我的意思是在內(nèi)存/垃圾收集器中)?試圖增加內(nèi)存限制ini_set(工作了一段時間)。
查看完整描述

2 回答

?
四季花海

TA貢獻1811條經(jīng)驗 獲得超5個贊

你的問題讓我想知道有什么區(qū)別,并使用 77 個字符的長字符串數(shù)組運行了一些測試。


結果如下


康卡特


Start Memory Usage: 2097152 KB

Post Array Build Memory Usage: 6291456 KB

Concat without Quotes Time: 28.893930912018

Post Concat without Quotes Memory Usage: 6291456 KB

用引號連接


測試不斷耗盡內(nèi)存,即使在低循環(huán)量下也失敗


內(nèi)爆


Start Memory Usage: 2097152 KB

Post Array Build Memory Usage: 6291456 KB

Implode Time: 19.913722991943

Implode Memory Usage: 6291456 KB

測試方法


set_time_limit(180);


function convert_memory_usage($size) {

    if($size < 1024){

        return $size . " B";

    }

    else if(1048576)

    {

        return ($size / 1024) . " KB";

    }else{

        return ($size / 1048576) . " MB";

    }


function implode_array($arr){

    $str = implode("", $arr);

}


function concat_without_quotes($arr){

    $str = "";

    foreach($arr as $s){

        $str .= $s;

    }

}


function concat_with_quotes($arr){

    $str = "";

    foreach($arr as $s){

        $str = "{$str}{$s}";

    } 

}


echo "Start Memory Usage: " . convert_memory_usage(memory_get_usage(true)) . "<br/>";


$string = "01234567890123456789012345678901234567890123456789012345678901234567890123456";

$array = [];

for($x = 0; $x < 40000; $x++){

    array_push($array, $string);

}


echo "Post Array Build Memory Usage: " . convert_memory_usage(memory_get_usage(true)) . "<br/>";


$start = microtime(true);


for($x = 0; $x < 10000; $x++){

    // Change method to loop here

    implode_array($array);

}


// And Uncomment as required


//echo "Implode Time: " . (microtime(true) - $start) . "</br>";

//echo "Implode Memory Usage: " . convert_memory_usage(memory_get_usage(true)) . "<br/>";


//echo "Concat with Quotes Time: " . (microtime(true) - $start) . "</br>";

//echo "Concat with Quotes Memory Usage: " . convert_memory_usage(memory_get_usage(true)) . "<br/>";


//echo "Concat without Quotes Time: " . (microtime(true) - $start) . "</br>";

//echo "Concat without Quotes Memory Usage: " . convert_memory_usage(memory_get_usage(true)) . "<br/>";

總結 經(jīng)過這些測試,您可以看到這implode似乎是加入大量strings.


用法 $long_string = implode("", $array_of_strings)


使用 PHP 7.3.4 版


查看完整回答
反對 回復 2021-11-13
?
天涯盡頭無女友

TA貢獻1831條經(jīng)驗 獲得超9個贊

正如在此評論中提到的:https : //www.php.net/manual/en/language.operators.string.php#60035,通過將字符串放在雙引號內(nèi)來連接字符串更有效。因此,更有效的連接方式是:

$values_string = "{$values_string}{$values},";


查看完整回答
反對 回復 2021-11-13
  • 2 回答
  • 0 關注
  • 183 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號