-1

我正在尝试记录某些方法在我的 ASP.Net 应用程序中需要多长时间。在我的服务调用中,我有一个具有 StartTimer 和 StopTimer 方法的基类。

这个想法是我可以启动一个计时器,记录一个开始时间,然后停止计时器,获取当前日期并计算出差异。

public class ServiceBase
{
  private DateTime _timerValue;
  private string _message;

  public string StartTimer(string message)
  {
    _message = message;
    _timerValue = DateTime.UtcNow;
    return string.Format("Started {0} at {1}", _message, _timerValue.ToString("HH:mm:ss.ffff"));
  }

  public string StopTimer()
  {
    var dateNow = DateTime.UtcNow;
    var t = dateNow - _timerValue;
    var time = t.Milliseconds;
    return string.Format("Completed {0} - {1}ms at {2}", _message, time, dateNow.ToString("HH:mm:ss.ffff"));
  }

}

这是从我的主类中的方法调用的,如下所示:

public UserDto ValidateUser(UserDto user)
{
    Logger.Info(StartTimer(string.Format("ValidateUser({0})", user.Username)));
    var reply = _ub.ValidateUser(user);
    Logger.Info(StopTimer());
    return reply;
}

但是,我的日志文件中没有得到预期的结果。例如,看这里:

在此处输入图像描述

注意最后的启动/停止。

在 19:59:01.4988开始 GetSprints(2) 在19 : 59:03.0301 完成 GetSprints(2) - 531ms

据说 19:59:01.4988 和 19:59:03.0301 之间的差异只有 531 毫秒 - 这是不正确的。

更新:

多亏了这些答案,我的新代码看起来像这样,并且似乎可以工作:

public class ServiceBase
    {
        private string _message;
        private readonly Stopwatch _stopwatch;

        public ServiceBase()
        {
            _stopwatch = new Stopwatch();
        }

        public string StartTimer(string message)
        {
            _message = message;
            _stopwatch.Start();
            return string.Format("Started {0}", _message);
        }

        public string StopTimer()
        {
            _stopwatch.Stop();
            return string.Format("Completed {0} - {1}ms", _message, _stopwatch.ElapsedMilliseconds);
        }

    }

不知道为什么我得到了 -1 票 - 我认为这是一个很好的问题,希望能帮助其他人。

4

2 回答 2

2

你想要t.TotalMilliseconds,没有t.Milliseconds。如果您不包括 Total,那么您只会获得TimeSpan.

于 2013-08-31T20:14:26.813 回答
1
 var time = t.Milliseconds;

应该...

 var time = t.TotalMilliseconds;
于 2013-08-31T20:14:53.637 回答