作成日: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);