在读取数组中的整个文件(如hex)后,我有一个非常大的数组存储在内存中:
$bin_content = fread(fopen($filename,"r"),filesize($filename));
$hex_decode = explode(" ",chunk_split(bin2hex($bin_content),2," "));
unset($bin_content);
function myfunction($i) {
global $hex_decode;
// stuff here
}
当我创建一个使用此$hex_decode
数组作为全局的函数时...脚本运行就像永远(非常慢)但是如果我调用该函数将$hex_decode
作为参数传递({{ 1}}),事情变得更快。
任何人都可以解释原因吗?有没有办法通过以不同的方法读取该文件来加速脚本。
我需要将整个文件放在该数组中,而不是逐行,因为我正在构建一个自定义的ASN.1解码器,我需要拥有它。
答案 0 :(得分:2)
有没有办法通过以不同的方法读取该文件来加速脚本。
就我个人而言,我会使用stream filter进行块读取和转换文件,而不是一次性读取整个文件,然后将整个文件转换并修复到内存中,处理任何文件在流过滤器中过滤和修复ASN.1结构。
我知道这不是对实际问题的直接回应,而是对上面的单引号;但它可以提供更少内存的替代方案。
答案 1 :(得分:1)
在StackOverflow上已经有类似的问题,请看一下:
The advantage / disadvantage between global variables and function parameters in PHP?
答案 2 :(得分:1)
如果您的文件很大,您可以考虑使用内存保守的方法。 ASN.1通常以type-length-value的结构编码,这意味着您不必将整个内容存储在内存中,只需要在任何给定时间处理您需要处理的数据。