Unk*_*ech 3 php memory-consumption
当我使用file_get_contents并将其作为参数传递给另一个函数而不将其分配给变量时,是否在脚本执行完成之前释放了该内存?
例如:
preg_match($pattern, file_get_contents('http://domain.tld/path/to/file.ext'), $matches);
Run Code Online (Sandbox Code Playgroud)
file_get_contents使用的内存是否会在脚本完成之前释放?
Pau*_*xon 10
为销容文件内容而创建的临时字符串将被销毁.在没有深入研究来源的情况下,可以通过以下几种方法测试作为函数参数创建的临时值是否被破坏:
这通过使用报告其自身消亡的类来证明生命周期:
class lifetime
{
public function __construct()
{
echo "construct\n";
}
public function __destruct()
{
echo "destruct\n";
}
}
function getTestObject()
{
return new lifetime();
}
function foo($obj)
{
echo "inside foo\n";
}
echo "Calling foo\n";
foo(getTestObject());
echo "foo complete\n";
Run Code Online (Sandbox Code Playgroud)
这输出
Calling foo
construct
inside foo
destruct
foo complete
Run Code Online (Sandbox Code Playgroud)
这表示隐含的临时变量在foo函数调用之后被销毁.
这是另一种方法,它使用memory_get_usage来测量我们消耗了多少进一步的确认.
function foo($str)
{
$length=strlen($str);
echo "in foo: data is $length, memory usage=".memory_get_usage()."\n";
}
echo "start: ".memory_get_usage()."\n";
foo(file_get_contents('/tmp/three_megabyte_file'));
echo "end: ".memory_get_usage()."\n";
Run Code Online (Sandbox Code Playgroud)
这输出
start: 50672
in foo: data is 2999384, memory usage=3050884
end: 51544
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4784 次 |
最近记录: |