我正在尝试测量应用程序的每个操作所花费的时间,因为我正在重建遗留系统。
现在我在控制器级别这样做:
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()
和实例化对象之间的区别是什么?性能
答案 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