Grails - 如何计算在任何操作上花费的执行时间?

时间:2013-04-17 12:49:36

标签: grails

我正在尝试测量应用程序的每个操作所花费的时间,因为我正在重建遗留系统。

现在我在控制器级别这样做:

def actionStart() {
    session.startTime = new Date().getTime()
}
def actionEnd() {
    def endTime = new Date().getTime()
    timeHandler(endTime, session.startTime)
}
def timeHandler(end, start){
    return end - start
}

重要提示:我想将其移至过滤器并在每个操作的开始和结束时自动执行它。

最佳方法应该是什么?提前谢谢。

PS:获取System.currentTimeMillis()和实例化对象之间的区别是什么?性能

4 个答案:

答案 0 :(得分:5)

您应该可以使用Grails filters执行此操作:

class TimeFilters {
    def filters = {
        timeCheck(controller: '*', action: '*') {
            before = { model ->
                ...
            }
            after = { model ->
                ...
            }
        }
    }
} 

如果查看java.util.Date的源代码:

public Date() {
    this(System.currentTimeMillis());
}

所以这只是创建和获取时间的性能开销:new Date().getTime()

答案 1 :(得分:4)

在行动开始时,请执行以下操作:

long now = System.currentTimeMillis();

在行动结束时,请执行以下操作:

System.out.println( (System.currentTimeMillis() - now) + " ms");

并将您的行动置于这两行之间

<强>声明:

我根据java(编辑标签之前)回答了这个问题,所以请澄清你的标签。

答案 2 :(得分:2)

您可以使用afterInceptor和beforeInceptor

之后的方法来完成此操作
def actionArray = [:];

def afterInterceptor = {
        def time = System.currentTimeMillis() - actionArray[actionUri]
        println("Used time for action " + actionUri + "is: " + time + " ms");
    }

    def beforeInterceptor = {
        actionArray[actionUri] = System.currentTimeMillis();
}

答案 3 :(得分:1)

今天出现了,在DZone / GroovyMag上提到:GProf is a profiler for Groovy