プログラムの処理時間を計測する簡単な方法(ボトルネックを探す)

プログラムを作ってる時、機能的なエラーは作ってるうちにわかりますよね。
ですが性能的なボトルネックは使ってみないとわかりませんよね。
この関数かな?とあたりをつけて改善していくことでしょう。

たまたま1ファイルの処理についてのプログラムを書いてたんですが、複数ファイルを並行処理することになってけっこう時間かかるのがわかりました。
でどーやって性能のボトルネックを探すかってことのtipsです。

すごい初歩的なやり方です。

Goで書いてます。

package main

import (
	"fmt"
	"time"
	"strconv"
)

func main() {
	fmt.Println("===Start===")
	bf_t := time.Now()
	fmt.Println(bf_t)
	
	var total int64
	for i := 0 ; i < 3 ; i++ {
		bf_t_in := time.Now()
		//何かしらの処理
		time.Sleep(3 * time.Second)
		af_t_in := time.Now()
		total = total + af_t_in.Sub(bf_t_in).Nanoseconds()
	}
	af_t := time.Now()
	fmt.Println(af_t.Sub(bf_t))
	fmt.Println(strconv.FormatInt(total, 10))

}
===Start===
2009-11-10 23:00:00 +0000 UTC m=+0.000000001
9s
9000000000

https://play.golang.org/p/0Y1jS7our2b

timeパッケージを使うと便利でした。

参考
time - The Go Programming Language

qiita.com

逆引きGolang (日付と時刻)

スターティングGo言語

スターティングGo言語

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)