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

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

たまたま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言語の書籍 - S氏はたまにblogを更新してます in hatena
Goでトークナイズ処理してみる。 - S氏はたまにblogを更新してます in hatena
golang カテゴリーの記事一覧 - S氏はたまにblogを更新してます in hatena


スターティングGo言語

スターティングGo言語

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

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