我有一个耗时的脚本,我想定期记录它的执行时间。我如何找出当前的执行时间?
答案 0 :(得分:2)
symfonian记录执行时间的方法是使用symfony附带的计时器管理器。
//Get timer instance called 'myTimer'.
$timer = sfTimerManager::getTimer('myTimer');
//Start timer.
$timer->startTimer();
// Do things
...
// Stop the timer and add the elapsed time
$timer->addTime();
此计时器将保存到您使用symfony配置的任何记录器中。
默认情况下,symfony具有DEV环境的sfWebDebugLogger,但您可以创建自己的并在factories.yml
文件中对其进行配置。
关于此记录器的好处是它还记录了对计时器的调用次数。
答案 1 :(得分:0)
为什么不使用date('Y-m-d H:i:s')
并记录...和/或计算与使用date()获得的开始时间的差异?
答案 2 :(得分:0)
考虑一下你在问什么,每个动作都记录在symfony log(root / log / app_name_ [env] .log)中。一旦操作结束就完成了这个日志记录,(没有简单的方法来计算从php执行php的线程的执行时间)。你可以尝试弄乱代码并添加代码,以便记录代码的某些点,当前的执行时间,如:
$init = microtime();
log("Process started at:". $init);
foreach($this->getLotsOfRecords() as $index=>$record)
{
$start = microtime();
log ($index." record started at".microtime());
[do stuff]
$end = microtime();
log ($index." record ended at". $end . " time elapsed: ". ($start - $end));
}
$last = microtime();
log("Total elapsed time is: ". ($init - $last));
这是伪代码但我相信你可以弄清楚剩下的,希望这有帮助!
答案 3 :(得分:0)
我最后编写了自己的静态类:
class Timer
{
protected static $start = null;
public static function getDuration($format = '%H:%I:%S')
{
$now = new DateTime();
if (!self::$start)
{
self::$start = new DateTime();
}
$period = $now->diff(self::$start);
return $period->format($format);
}
}
并将其记录为部分(循环):
<?php $logger->log(sprintf("Duration: %s", $duration = Timer::getDuration())) ?>