Qta*_*acz 5 php memory memory-management
我正在制作一个基准测试类来显示页面加载时间和内存使用情况.加载时间已经有效,但是当我显示内存使用情况时,它不会改变示例:
$conns = array();
ob_start();
benchmark::start();
$conns[] = mysql_connect('localhost', 'root', '');
benchmark::stop();
ob_flush();
Run Code Online (Sandbox Code Playgroud)
使用相同的内存
$conns = array();
ob_start();
benchmark::start();
for($i = 0; $i < 1000; $i++)
{
$conns[] = mysql_connect('localhost', 'root', '');
}
benchmark::stop();
ob_flush();
Run Code Online (Sandbox Code Playgroud)
我正在使用memory_get_usage(true)来获取以字节为单位的内存使用量.
memory_get_usage(true)将显示php引擎分配的内存量,而不是脚本实际使用的内存量.您的测试脚本很可能不需要引擎要求更多内存.
对于测试,获取一个大(ish)文件并将其读入内存.你应该看到一个变化.
我已成功用于memory_get_usage(true)跟踪Web爬网脚本的内存使用情况,并且工作正常(因为目标是在达到系统内存限制之前减慢速度).要记住的一件事是它不会根据实际使用情况而改变,它会根据引擎请求的内存而改变.所以你最终看到的是突然跳跃而不是减缓增长(或缩小).
如果将real_usage标志设置为false,则可能会看到非常小的内存更改 - 但是,这无法帮助您监视php从系统请求的内存量.
(更新:要清楚我描述的区别在于脚本变量使用的内存与引擎运行脚本所需的内存之间的差异.所有相同的脚本,不同的测量方法.)
我不是 PHP 内部的专家,但我可以想象它echo不会影响 PHP 使用的内存量,因为它只是向客户端输出一些内容。
如果启用输出缓冲,情况可能会有所不同。
以下内容应该会有所不同:
$result = null;
benchmark::start()
for($i = 0; $i < 10000; $i++)
{
$result.='test';
}
Run Code Online (Sandbox Code Playgroud)