PHP數(shù)組內(nèi)存耗用太多問(wèn)題的解決方法
更新時(shí)間:2010年04月05日 00:57:39 作者:
一般來(lái)說(shuō),PHP數(shù)組的內(nèi)存利用率只有 1/10, 也就是說(shuō),一個(gè)在C語(yǔ)言里面100M 內(nèi)存的數(shù)組,在PHP里面就要1G。特別是在PHP作為后臺(tái)服務(wù)器的系統(tǒng)中,經(jīng)常會(huì)出現(xiàn)內(nèi)存耗費(fèi)太大的問(wèn)題。
因?yàn)檫@個(gè)是語(yǔ)言的問(wèn)題,常規(guī)方案比較難以解決。下面是一種通過(guò)string 解決的方案。
$total = 100000;
$double = "";
for ($i = 0; $i < $total; $i++)
{
$double .= pack("d", $i + 0.1);
}
for ($i = 0; $i < $total; $i++)
{
unpack("@" . ($i * 8) . "/d", $double);
}
這個(gè)例子用一個(gè)string 保存一個(gè)double 的數(shù)組。然后在使用的時(shí)候unpack出來(lái)。
當(dāng)然,這會(huì)影響性能。要看具體的需求。
比如這樣的情況下:
你有10個(gè)數(shù)組,每個(gè)數(shù)組10M (1百萬(wàn)數(shù)據(jù)左右),那么十個(gè)要花費(fèi) 100M內(nèi)存。
再加上10個(gè)人并發(fā)的話(huà),內(nèi)存就會(huì)嚴(yán)重不夠了。
然后,在10個(gè)數(shù)組,不是每次都同時(shí)使用的。你可以,把他們保存成string
然后,在使用的時(shí)候,unpack某一個(gè)string變成一個(gè)數(shù)組。
復(fù)制代碼 代碼如下:
$total = 100000;
$double = "";
for ($i = 0; $i < $total; $i++)
{
$double .= pack("d", $i + 0.1);
}
for ($i = 0; $i < $total; $i++)
{
unpack("@" . ($i * 8) . "/d", $double);
}
這個(gè)例子用一個(gè)string 保存一個(gè)double 的數(shù)組。然后在使用的時(shí)候unpack出來(lái)。
當(dāng)然,這會(huì)影響性能。要看具體的需求。
比如這樣的情況下:
你有10個(gè)數(shù)組,每個(gè)數(shù)組10M (1百萬(wàn)數(shù)據(jù)左右),那么十個(gè)要花費(fèi) 100M內(nèi)存。
再加上10個(gè)人并發(fā)的話(huà),內(nèi)存就會(huì)嚴(yán)重不夠了。
然后,在10個(gè)數(shù)組,不是每次都同時(shí)使用的。你可以,把他們保存成string
然后,在使用的時(shí)候,unpack某一個(gè)string變成一個(gè)數(shù)組。
您可能感興趣的文章:
- PHP 內(nèi)存緩存加速功能memcached安裝與用法
- 訪(fǎng)問(wèn)php時(shí)提示內(nèi)存位置訪(fǎng)問(wèn)無(wú)效的解決辦法和思路分析
- 采用PHP函數(shù)memory_get_usage獲取PHP內(nèi)存清耗量的方法
- PHP中使用unset銷(xiāo)毀變量并內(nèi)存釋放問(wèn)題
- phpExcel導(dǎo)出大量數(shù)據(jù)出現(xiàn)內(nèi)存溢出錯(cuò)誤的解決方法
- 關(guān)于PHP內(nèi)存溢出問(wèn)題的解決方法
- 解析PHP中的內(nèi)存管理,PHP動(dòng)態(tài)分配和釋放內(nèi)存
- 解析PHP中的unset究竟會(huì)不會(huì)釋放內(nèi)存
- php統(tǒng)計(jì)時(shí)間和內(nèi)存使用情況示例分享
- php出現(xiàn)內(nèi)存位置訪(fǎng)問(wèn)無(wú)效錯(cuò)誤問(wèn)題解決方法
- PHP腳本內(nèi)存泄露導(dǎo)致Apache頻繁宕機(jī)解決方法
- PHP通過(guò)內(nèi)置函數(shù)memory_get_usage()獲取內(nèi)存使用情況
- php查詢(xún)mysql大量數(shù)據(jù)造成內(nèi)存不足的解決方法
- php實(shí)現(xiàn)讀取內(nèi)存順序號(hào)
- 解決PHP里大量數(shù)據(jù)循環(huán)時(shí)內(nèi)存耗盡的方法
- PHP內(nèi)存使用情況如何獲取
相關(guān)文章
Centos 6.5下PHP 5.3安裝ffmpeg擴(kuò)展的步驟詳解
大家都知道ffmpeg是一款視頻流的軟件了,我們?cè)趌inux系統(tǒng)中可以安裝ffmpeg了,這篇文章主要介紹了在Centos 6.5下PHP 5.3安裝ffmpeg擴(kuò)展的步驟,需要的朋友可以參考下。2017-03-03
php采集中國(guó)代理服務(wù)器網(wǎng)的方法
這篇文章主要介紹了php采集中國(guó)代理服務(wù)器網(wǎng)的方法,涉及php采集的相關(guān)使用技巧,需要的朋友可以參考下2015-06-06
PHP 字符串正則替換函數(shù)preg_replace使用說(shuō)明
PHP 字符串正則替換函數(shù)preg_replace使用說(shuō)明,需要的朋友可以參考下。2011-07-07
PHP中usort在值相同時(shí)改變?cè)嘉恢脝?wèn)題的解決方法
從 PHP 4.1.0 后,usort 在比較的值相同時(shí),原始位置可能會(huì)改變,如果比較的2個(gè)值相同,則它們?cè)谂判蚪Y(jié)果中的順序是隨機(jī)的。如果你需要保持相同值的原始位置,可以參考本文的方法。2011-11-11
WordPress開(kāi)發(fā)中的get_post_custom()函數(shù)使用解析
這篇文章主要介紹了WordPress開(kāi)發(fā)中的get_post_custom()函數(shù)使用解析,get_post_custom()函數(shù)用于獲取自定義字段,需要的朋友可以參考下2016-01-01
PHP獲得當(dāng)日零點(diǎn)時(shí)間戳的方法分析
這篇文章主要介紹了PHP獲得當(dāng)日零點(diǎn)時(shí)間戳的方法,結(jié)合實(shí)例形式分析了php常見(jiàn)時(shí)間戳轉(zhuǎn)換與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
Array of country list in PHP with Zend Framework
Array of country list in PHP with Zend Framework,需要的朋友可以參考下。2011-10-10
php多線(xiàn)程實(shí)現(xiàn)方法及用法實(shí)例詳解
這篇文章主要介紹了php多線(xiàn)程實(shí)現(xiàn)方法及用法實(shí)例,PHP多線(xiàn)程實(shí)現(xiàn)方法和fsockopen函數(shù)有關(guān),需要的朋友可以參考下2015-10-10

