æ§è½è¨æ¸¬ã¦ã¼ãã£ãªãã£
ã ãã¶åã«Scalaã§æ¸ããæ§è½è¨æ¸¬ã¦ã¼ãã£ãªãã£ãçºæãã¾ãããScalaãªã®ã§Javaã¯ã©ã¹ã®æ§è½è¨æ¸¬ã§ä½¿ãã¾ãã以ä¸ã¯ãµã³ãã«ã
// é¢æ°ã5åå®è¡ãã¦ãå¦çæéã®å¹³åã»æ大ã»æå°ãåºåããã print( Perf.perf( "test", 5 ) { Thread.sleep(500); }.toString )
å®è¡çµæã§ãããå¹³å,æ大,æå° [åå¦çæé]ãã§ãã
---test 500, 501, 500 [ 500 501 500 500 500 ]
ã¦ã¼ãã£ãªãã£ã®å®è£ ã¯æ¬¡ã®éãã
/** * æ§è½è¨æ¸¬ã¦ã¼ãã£ãªã㣠*/ object Perf { /** * æå®ãããåæ° proc ãå®è¡ããæè¦æéã®å¹³åãæ大ãæå°å¤ãåºåããã */ def printPerf[R]( id:String, count:Int )( proc: =>R ):R = { val result = perf( id, count )( proc ) println( result ) result.result } /** * æå®ãããåæ° proc ãå®è¡ããæè¦æéã®å¹³åãæ大ãæå°å¤ãåºåããã */ def printPerfTime( id:String, count:Int )( proc: =>Long ):Unit = { val result = perfTime( id, count )( proc ) println( result ) } /** * æå®ãããåæ° proc ãå®è¡ããæè¦æéã®å¹³åãæ大ãæå°å¤ãè¿ãã */ def perf[R]( id:String, count:Int )( proc: =>R ):PrefResult[R] = { // ååã®ã¯ã©ã¹ãã¼ãæéãæå¶ãããã // 1度å®è¡ãã var result = proc var datas:List[Long] = Nil for ( i <- 1 to count ) { val start:Long = System.currentTimeMillis proc datas = (System.currentTimeMillis - start) :: datas } PrefResult[R]( id, datas, result ) } /** * æå®ãããåæ° proc ãå®è¡ããæè¦æéã®å¹³åãæ大ãæå°å¤ãè¿ãã */ def perfTime( id:String, count:Int )( proc: =>Long ):PrefResult[Unit] = { // ååã®ã¯ã©ã¹ãã¼ãæéãæå¶ãããã // 1度å®è¡ãã var result = proc var datas:List[Long] = Nil for ( i <- 1 to count ) { val start:Long = System.currentTimeMillis datas = (proc - start) :: datas } PrefResult[Unit]( id, datas, () ) } } /** * è¨æ¸¬çµæ * @param id è¨æ¸¬ã®èå¥å * @param datas è¨æ¸¬çµæã®é å */ case class PrefResult[R]( id:String, datas:List[Long], result:R ) { /** æå¤§å¤ */ def max = datas.reduceLeft( (max,i) => i max max ) /** æå°å¤ */ def min = datas.reduceLeft( (min,i) => i min min ) /** å¹³å */ def avg = datas.reduceLeft( (sum,i) => sum+i ) / datas.size override def toString:String = { var str = new StringBuilder str.append( "\n---" ).append(id).append("\n") str.append( avg ).append(", ").append( max ).append(", ").append( min ).append(" [ ") datas.foreach( i=> str.append( i ).append(" ") ) str.append("]\n") str.toString } }
ãã«ãã«Mavenã使ã£ã¦ããJavaããã¸ã§ã¯ãã§ããã°ãScalaもさくっと使えるã®ã§ããã¹ãã±ã¼ã¹ã¨ãæ§è½è¨æ¸¬ã§æå¹æ´»ç¨ãããã¨ããã§ããªã