2009年1月7日 星期三

測試PHP中array與物件的使用記憶體

定義:

class c1 {
}

class c2 {
function f1() {}
function f2() {}
function f3() {}
function f4() {}
function f5() {}
}

class c3 {
var $a1;
}

結果:

100 1000 10000
-------------------------------------------------------------------
cl: 85.6/85.8 250.8/250.9 2288.0/2288.1
c2: 85.6/85.8 250.8/250.9 2288.0/2288.1
c3: 89.3/89.4 296.7/296.8 2755.8/2755.9
array: 83.0/85.5 227.1/227.2 1693.4/1693.4

*數字: memory_get_usage/memory_get_peak_usage (kb)

結論:
1. 物件比Array佔用的記憶體多.
2. 物件內宣告method不會佔用記憶體(應該只是一個vtable結構).
3. 物件內宣告屬性會佔用記憶體.

所以在開發ORM時, 應該儘量避免宣告屬性,
把必要屬性包裝在method中, 必要時才呼叫method讀取,
在提取大量Model時可有效降低記憶體的使用量.

沒有留言: