[英]PHP big array manipulation
在读取整个数组中的整个文件(如十六进制)后,我在内存中存储了一个很大的数组:
$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
作为参数传递( myfunction($i,$hex_decode) instead of myfunction($i) in which $i is a pointer
),则速度更快。
谁能解释为什么? 还有什么方法可以通过以其他方法读取文件来加快脚本速度。
我需要将整个文件放在该数组中,而不是逐行显示,因为我正在构建自定义的ASN.1解码器,所以我需要全部包含它。
还有什么方法可以通过以其他方法读取文件来加快脚本速度。
我个人将使用流过滤器对读取的文件进行块读取和转换,而不是一次性读取整个文件,然后使用内存中的整个文件进行转换和修复,从而处理ASN的所有过滤和修复.1流过滤器内的结构。
我知道这不是对实际问题的直接回答,而是对上面的单引号。 但它可以提供较少的内存消耗替代方法。
StackOverflow已经有一个类似的问题,请看一下:
如果文件很大,则可以考虑采用内存保守的方法。 ASN.1通常以类型-长度-值的结构进行编码,这意味着您不必将整个内容存储在内存中,而只需要在任何给定时间处理所需的数据即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.