十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
這個(gè)問(wèn)題在PHP的官方網(wǎng)站上叫緩沖查詢(xún)和非緩沖查詢(xún)(Buffered and Unbuffered queries)。PHP的查詢(xún)?nèi)笔∧J绞蔷彌_模式。也就是說(shuō),查詢(xún)數(shù)據(jù)結(jié)果會(huì)一次全部提取到內(nèi)存里供PHP程序處理。這樣給了PHP程序額外的功能,比如說(shuō),計(jì)算行數(shù),將指針指向某一行等。更重要的是程序可以對(duì)數(shù)據(jù)集反復(fù)進(jìn)行二次查詢(xún)和過(guò)濾等操作。但這種緩沖查詢(xún)模式的缺陷就是消耗內(nèi)存,也就是用空間換速度。
成都創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)和政,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):028-86922220
相對(duì)的,另外一種PHP查詢(xún)模式是非緩沖查詢(xún),數(shù)據(jù)庫(kù)服務(wù)器會(huì)一條一條的返回?cái)?shù)據(jù),而不是一次全部返回,這樣的結(jié)果就是PHP程序消耗較少的內(nèi)存,但卻增加了數(shù)據(jù)庫(kù)服務(wù)器的壓力,因?yàn)閿?shù)據(jù)庫(kù)會(huì)一直等待PHP來(lái)取數(shù)據(jù),一直到數(shù)據(jù)全部取完。
很顯然,緩沖查詢(xún)模式適用于小數(shù)據(jù)量查詢(xún),而非緩沖查詢(xún)適應(yīng)于大數(shù)據(jù)量查詢(xún)。
PHP 無(wú)法手動(dòng)釋放內(nèi)存,你 unset 了,也要等 GC 來(lái)自動(dòng)回收, 這個(gè)不是 C語(yǔ)言, 內(nèi)存是 PHP 來(lái)管理的。 這個(gè)只能是加大內(nèi)存,或者改用其他內(nèi)存占用小的算法
在運(yùn)行PHP程序,通常會(huì)遇到“Fatal Error: Allowed memory size of xxxxxx bytes exhausted”的錯(cuò)誤, 這個(gè)意味著PHP腳本使用了過(guò)多的內(nèi)存,并超出了系統(tǒng)對(duì)其設(shè)置的允許最大內(nèi)存。
解決這個(gè)問(wèn)題,首先需要查看你的程序是否分配了過(guò)多的內(nèi)存,在程序沒(méi)有問(wèn)題的情況下,你可以通過(guò)一下方法來(lái)增加PHP的內(nèi)存限制(memory_limit)。
unset()是可以釋放內(nèi)存的,但是$str=null基本釋放不了的,建議還是用unset()就好了,$str=null只是用來(lái)清空變量,以防下面再用的時(shí)候遭到干擾的。
file函數(shù)一般只占用系統(tǒng)
句柄
資源。讀取其中的內(nèi)容并保存至某個(gè)變量會(huì)占用內(nèi)存,跟file函數(shù)無(wú)關(guān)。
file函數(shù)在打開(kāi)之后,需要用close關(guān)閉并釋放file句柄,否則可能會(huì)導(dǎo)致其他程序不能打開(kāi)這個(gè)文件(文件鎖定)。
除了用alloc等函數(shù)顯式分配內(nèi)存的外,一般不需要專(zhuān)門(mén)
釋放內(nèi)存
,系統(tǒng)會(huì)在結(jié)束時(shí)自動(dòng)回收內(nèi)存。