2011-03-08 56 views
0

我想在我的網站的php代碼中添加6000行代碼,運行在LAMP上。 共享主機$ 6 /月。這個片段會在apache上吃很多php內存嗎?

我的問題是它會吃掉很多的PHP內存?

if($id==1) 
{ 
sprintf($url,....); 
} 
else 
if($id==2) 
..... 

,並以此類推,直到$id等於6000

+4

完全除了內存消耗,沒有更好的方法來做到這一點?! O_O – deceze 2011-03-08 05:12:09

+0

@deceze我認爲他堅持讓他的錢值得。 – 2011-03-08 05:14:14

+1

@ scrum-meister 0.01¢/ if-statement似乎高估了我';)' – 2011-03-08 05:15:58

回答

1

它會吃了太多的內存和CPU,即使「太多」是隻有幾KB;你可以編寫比這更好的代碼。

+1

強調**你可以編碼比這更好** – 2011-03-08 05:17:11

+0

哦,那麼堆棧有什麼用處?怎麼來CPU?如果我在DB中放置相同的信息,那麼它會消耗更多的內存和CPU!可能是 – user5858 2011-03-08 05:26:40

+0

,但我並沒有考慮使用數據庫。請參閱sarnold針對一種方法的回答。 – 2011-03-08 05:29:04

1

肯定會「吃光」記憶。分析器必須加載6000 if語句,網址等..

既然你在LAMP,趁M的拋網址到MySQL數據庫,並選擇基礎上,$id

相應的記錄
3

到達$url 6000需要比到達$url更長的時間1.不是6000倍,但更長。

我不太確定這個設計的智慧,但使用an array可能會允許更快的存取時間:

$urls = array(1 => "http://www.foo.bar/", 2 => "http://blubber.blorp/"); 
sprintf($urls[$id],...); 

如果所有的URL與http://開始,然後你可以移動到這你的sprintf()調用來保存內存。但是,每6000個字符串乘以100個字節(假設長URL)仍然只有600,000個字節,並且有些開銷可能咀嚼少於1兆字節的內存總量。

+0

其他方法是將這些數據存儲在索引文件中以節省內存。 – user5858 2011-03-08 05:28:58

+0

@ user543087,這足夠了,一個文件每個URL分配128個字節,並使用例如'pread(文件,url,128,$ id * 128)'(mangling C和php :)將使用很少的內存,但可能涉及到磁盤的更多行程。使用SQLite3可能會更簡單,並且不會對URL進行長度限制。 – sarnold 2011-03-08 05:39:08