0

我用于获取特定作业类中每个进程所用时间的伪代码如下所示。

                psteps.each {ProcessingStep pstep ->
    List<ExecutionState> states = ProcessingStepUpdate.findAllByProcessingStepAndState(pstep,ExecutionState.blah)
    states.each{ProcessingStepUpdate psu ->
        use(groovy.time.TimeCategory) {
            startTime=pc.started
            endTime=psu.date
            timeTaken = endTime-startTime
            println "Time Taken for ${pc.startJobClass} is ${timeTaken} in ${JCType}"                    
        }
    }
}

该代码现在不是数组/列表的形式,因此我无法计算每个作业类所花费的总时间。

这是我尝试过的

use(groovy.time.TimeDuration){
        duration=timeTaken.toArray().sum()
        println "Time taken for ${JCType} is ${duration}"
        println "***********************************************************"
    }

知道错误是什么吗?我是 OOPS 世界的新手,并且在过去 2 天里一直坚持下去。

4

2 回答 2

2

timeTaken 不是一个列表,它是一个 groovy.time.TimeDuration 对象。试试这个:

def states = ProcessingStepUpdate.findAllByProcessingStepAndState(pstep,ExecutionState.blah)
def times = []
states.each{psu ->
    use(groovy.time.TimeCategory) {
        startTime=pc.started
        endTime=psu.date
        timeTaken = endTime-startTime
        times << timeTaken // You add timeTaken to arrayList
        println "Time Taken for ${pc.startJobClass} is ${timeTaken} in ${JCType}"
        println "Total time ${times.sum()}"     
    }
}
于 2012-08-22T11:34:25.557 回答
0

在你states.each{声明一个将 现在在闭包内totalTime保存总时间的变量之前,只需继续添加到 totalTime 尝试阅读一些 groovy,你可以跳过很多代码,就像使用
def totalTime = 0
eachtimeTaken
totalTime += Integer.parseInt(timeTaken)
List<ExecutionState> statesdef states

也你做了之后states.each{就不需要写了ProcessingStepUpdate psu ->!你可以做也可以不做psu ->。用于引用列表it中的当前对象states

于 2012-08-22T11:10:33.760 回答