2

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

现在我正在控制器级别执行此操作:

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
}

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

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

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

4

4 回答 4

5

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

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

如果您查看以下源代码java.util.Date

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

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

于 2013-04-17T13:30:49.317 回答
5

在动作开始时这样做:

long now = System.currentTimeMillis();

在动作结束时,这样做:

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

并把你的行动放在这两条线之间

免责声明:

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

于 2013-04-17T12:54:19.057 回答
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();
}
于 2014-11-19T11:10:52.097 回答
1

今天出现了,在 DZone / GroovyMag 上提到:GProf 是 Groovy 的分析器

于 2013-04-17T17:13:55.957 回答