2013-01-31 40 views
1

在为内存优化网站的同时,我注意到内存消耗出现飞跃,同时为特定目的包含大量PHP类文件(600+)。把事情分开,我注意到包括一个PHP文件(因此大概编译到操作码)比磁盘上的文件大小大约多50倍。包含PHP操作码内存猪?

在我的情况下在磁盘上的文件是一起围绕800 KB大小(与缩进和评论,纯粹的类的声明,而不是许多字符串),但包括所有这些之后,内存消耗大约为40 MB更高。

我测量这样的(PHP 5.3.6):

echo memory_get_usage(), "<br>\n"; 
include($file); 
echo memory_get_usage(), "<br>\n"; 

在循环中在600个文件,我可以看内存消耗从基本为零到40 MB增长。 (没有自动加载器加载额外的类,或立即执行的任何全局代码或构造函数代码,它只是纯粹的包含。)

这是正常行为吗?我认为操作码比纯粹的源代码更紧凑(删除所有空格和注释,或者例如只有一个或两个指令字节而不是“foreach”字符串等)?

如果这是正常的,有没有一种方法来优化它? (我假设使用操作码高速缓存只会让编译时间,而不是实际的内存消耗?)

+0

你只是包括一个文件。很难想象更多*正常的东西。但是,基于的操作码假设是什么? – Jon

+0

我期望内存消耗在增加后增长,但不会那么大。操作码假设是基于关于操作码应该如何工作的基本知识,具有简洁的二进制指令_code_而不是长语法__strings_,我觉得应该减少内存密集度。 –

+0

你正在包含什么文件? –

回答

1

显然,这只是它的方式。

我已经从地面重新测试该作业:

  • 包括空零长度的文件:784字节内存消耗增加
  • 包含一个空类X {}定义:2128个字节
  • 包括具有一个空的方法的类:2816字节
  • 包括一类无线这两个空方法:3504字节

包含文件的文件大小在所有测试中均小于150字节。

+1

感谢大家试图帮助我。 –