2010-07-08 29 views

回答

3

根據我如何閱讀你的問題,我認爲你可能會用PHP咆哮錯誤的樹。它從來沒有設計用於低內存開銷。

如果你只是想盡可能高效,那麼看看其他答案。請記住,每一個變量都會花費一定的內存,所以只能使用你所需要的,並讓垃圾回收器工作。確保只聲明局部作用域中的變量,以便在程序離開該作用域時可以獲取GC'd。對象將比標量變量更昂貴。但是我看到的最大的常見濫用是數據的多個副本。如果你有一個大的陣列,operate directly on it rather than copying it(它可能不是CPU的高效率,但它應該更有效率)。

如果你想在低內存環境下運行它,我建議找一種不同的語言來使用。 PHP很好,因爲它爲你管理一切(關於變量)。但是這種類型的轉換和靈活性需要付出代價(速度和內存使用)。每個變量都需要存儲大量的元數據。因此,一個8字節的int(32位)需要8個字節來存儲在C中,它可能會在PHP中佔用超過64個字節(因爲所有與之相關的「跟蹤」信息,例如類型,名稱,範圍信息,等等)。由於PHP並不是爲大內存加載而設計的,因此通常可以看到這種開銷。所以這是一個折衷。更多內存用於簡化編程。但是,如果你有緊張的記憶力限制,我會建議轉向不同的語言......

0

很難提供有關您要做什麼以及爲什麼內存利用率是問題的信息很少的建議。在常見的情況下(服務於許多請求的Web服務器),內存不是限制性工廠,儘可能快地爲請求提供服務,即使這意味着爲了提高速度而犧牲內存。

然而,以下的一般準則適用於:

  • unset的變量,只要你不需要他們。在一個寫得很好的程序中,這將不會產生太大的影響,因爲超出範圍的變量會產生相同的效果。
  • 在長時間運行的腳本中,使用循環引用的變量很多,並且如果使用PHP 5.3,trey會在某些點顯式調用垃圾回收器。
0

首先:不要嘗試通過使用引用來優化內存使用情況。 PHP是足夠聰明,不,如果你做這樣的事情,複製變量的內容:

$array = array(1,2,3,4,5,); 
$var = $array; 

PHP會當你寫它的內容僅複製變量。所有的時間使用參考,因爲你認爲他們會節省你複製變量內容往往會倒退;)

但是,我認爲你的問題很難回答,只要你更精確。

例如,如果您使用的是文件,建議不要總是以file_get_contents()整個文件,但使用f(open | ...)函數一次只加載文件的小部分,甚至可以跳過整個文件塊。

或者,如果您正在使用字符串,請儘可能使用返回字符串偏移量而不是其他字符串的函數(例如,strcspn而不是strpbrk)。