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

And*_*zzo 2 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
}
Run Code Online (Sandbox Code Playgroud)

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

什么应该是最好的方法?提前致谢.

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

Aly*_*mal 5

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

long now = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)

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

System.out.println( (System.currentTimeMillis() - now) + " ms");
Run Code Online (Sandbox Code Playgroud)

并将您的动作放在这两条线之间

免责声明:

我根据java回答了这个问题(在标记被编辑之前),因此请弄清楚您的标记。


Xeo*_*eon 5

您应该能够使用Grails过滤器执行此操作:

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

如果你看一下源代码java.util.Date:

public Date() {
    this(System.currentTimeMillis());
}
Run Code Online (Sandbox Code Playgroud)

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