1. ホーム
  2. function

[解決済み] Scalaでメソッドをプロファイリングするには?

2022-07-31 16:15:53

質問

Scalaのメソッドコールをプロファイリングする標準的な方法は何ですか?

私が必要とするのは、私がタイマーを開始および停止するために使用することができるメソッドの周りのフックです。

Javaでは、アスペクトプログラミング、aspectJを使用して、プロファイルされるメソッドを定義し、同じことを達成するためにバイトコードを注入します。

Scalaでは、静的型付けを失うことなく、関数の前後に呼び出される関数の束を定義することができる、より自然な方法はありますか?

どのように解決するのですか?

タイミングを測定したいコードを変更せずに、これを実行したいのですか?もし、コードを変更しても構わないのであれば、次のような方法があります。

def time[R](block: => R): R = {
    val t0 = System.nanoTime()
    val result = block    // call-by-name
    val t1 = System.nanoTime()
    println("Elapsed time: " + (t1 - t0) + "ns")
    result
}

// Now wrap your method calls, for example change this...
val result = 1 to 1000 sum

// ... into this
val result = time { 1 to 1000 sum }