2011-03-08 57 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