Example #1
0
    /// <summary>
    /// 记录一次行为的执行时间
    /// </summary>
    /// <param name="actionName">行为的名字</param>
    /// <param name="action">行为</param>
    /// <param name="unit">时间单位</param>
    public void Record(string actionName, Action action, RecordUnit unit = RecordUnit.Millisecond)
    {
        _CurrentRecordDepth++;

        RecordData record = new RecordData
        {
            ActionName = actionName,
            Unit       = unit,
            Depth      = _CurrentRecordDepth
        };

        _RecordList.Add(record);

        Stopwatch stopwatch = new Stopwatch();

        stopwatch.Start();

        // 因为 action中不一定是正确的
        // 所以应该包含在try-catch当中,并把异常抛回调用方
        try { action(); }
        catch (Exception e) { throw e; }
        finally
        {
            stopwatch.Stop();

            long tick = stopwatch.ElapsedTicks;
            record.Time = unit == RecordUnit.Millisecond ?
                          (double)tick / TimeSpan.TicksPerMillisecond :
                          (double)tick / TimeSpan.TicksPerSecond;

            _CurrentRecordDepth--;
        }
    }
Example #2
0
 public int ExtractIntFromRecordUnit(RecordUnit unit)
 {
     return(unit.score);
 }