作成日:2023-03-01, 更新日:2023-10-04
基本
「PHP 文字を連結するときの処理速度とメモリ使用量の比較」を元にdatetimeオブジェクトで作り替え
サンプル
class Lib_Measurement {
public $objDatetime_fst; // 開始日時のdatetimeオブジェクト
public $objDatetime_nxt; // 処理開始前のdatetimeオブジェクト
public $objDatetime_now; // 処理開始後のdatetimeオブジェクト
public $objDatetime_diff; // 処理の開始前後の差分のdatetimeオブジェクト
public $size_memory_fst; // 処理開始時のメモリサイズ
public $size_memory_nxt; // 処理開始前のメモリサイズ
public $size_memory_now; // 処理開始前のメモリサイズ
public $size_memory_diff; // 処理の開始前後の差分のメモリサイズ
public function __construct(){
$this->objDatetime_fst = $this->objDatetime_nxt = new \DateTime();
$this->size_memory_fst = $this->size_memory_nxt = memory_get_usage();
}
// 処理の前後の時間
public function diffProcessTime(){
$this->objDatetime_now = new \DateTime();
$this->objDatetime_diff = $this->objDatetime_nxt->diff($this->objDatetime_now);
// 書式でマイクロ秒が良い感じにならないので、手動計算
$digit_microseconds = 1000000;
$microseconds = 0;
$microseconds += ($this->objDatetime_diff->days * 24 * 3600 * $digit_microseconds);
$microseconds += ($this->objDatetime_diff->h * 3600 * $digit_microseconds);
$microseconds += ($this->objDatetime_diff->i * 60 * $digit_microseconds);
$microseconds += ($this->objDatetime_diff->s * $digit_microseconds);
$microseconds += ($this->objDatetime_diff->f * $digit_microseconds);
$microseconds /= $digit_microseconds;
$microseconds = ($this->objDatetime_diff->invert ? '-': '+') . sprintf('%0.6f', $microseconds);
$result_many = array(
'before_at' => $this->objDatetime_nxt->format('Y-m-d H:i:s.u'), // 処理前の時刻+ミリ秒
'after_at' => $this->objDatetime_now->format('Y-m-d H:i:s.u'), // 処理後の時刻+ミリ秒
'diff' => $microseconds,
);
// 2023-10-04: 「format('%R%a.%f')」がよろしくない…
// $result_many = array(
// 'before_at' => $this->objDatetime_nxt->format('Y-m-d H:i:s.u'), // 処理前の時刻+ミリ秒
// 'after_at' => $this->objDatetime_now->format('Y-m-d H:i:s.u'), // 処理後の時刻+ミリ秒
// 'diff' => $this->objDatetime_diff->format('%R%a.%f'), // 「+-(%R)」の秒数(%a)とミリ秒(%f)
// );
$this->objDatetime_nxt = $this->objDatetime_now; // 次回用に書換え
return $result_many;
}
// 処理の前後のメモリサイズ
public function diffMemorySize(){
$this->size_memory_now = memory_get_usage();
$this->size_memory_diff = $this->size_memory_now - $this->size_memory_nxt;
$result_many = array(
'before_at' => number_format($this->size_memory_nxt).'byte', // 処理前のメモリサイズ
'after_at' => number_format($this->size_memory_now).'byte', // 処理後のメモリサイズ
'diff' => number_format($this->size_memory_diff).'byte', // メモリサイズの差分
);
$this->size_memory_nxt = $this->size_memory_now; // 次回用に書換え
return $result_many;
}
}
※「$this->objDatetime_fst」「$this->size_memory_fst」は基本、使わないけど…必要になったときのために用意
呼出し
$obj_measurement = new Lib_Measurement(); ~ 何かの処理 ~ $proctime_many = $obj_measurement->diffProcessTime(); $memorysize_many = $obj_measurement->diffMemorySize(); var_dump($proctime_many); var_dump($memorysize_many); // 2回目以降はインスタンスの作成不要 ~ 何かの処理 ~ $proctime_many = $obj_measurement->diffProcessTime(); $memorysize_many = $obj_measurement->diffMemorySize(); var_dump($proctime_many); var_dump($memorysize_many);