2013-04-17 41 views
1

由于我正在重建遗留系统,因此我正在测量花在应用程序的每个动作上的时间。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()和instanciating一个对象有什么区别?性能?

回答

3

在行动开始这样做:

long now = System.currentTimeMillis(); 

在行动结束,这样做:

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

,并把这种两线之间的动作

声明:

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

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()

+0

,这如何帮助计算时间做呢?你会在两次封闭中打印出当前时间,然后做一些相关性和数学计算? –

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(); 
} 
相关问题