TimeSpan没有给出预期的结果

时间:2013-08-31 20:08:03

标签: c# asp.net timespan

我正在尝试记录某些方法在我的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;
}

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

enter image description here

请注意上次开始/停止。

19:59:01.4988 启动了GetSprints(2) 完成GetSprints(2) - 531ms 19:59:03.0301

据说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票 - 我认为这是一个很好的问题,希望有助于其他人。

2 个答案:

答案 0 :(得分:2)

您需要t.TotalMilliseconds,不需要t.Milliseconds。如果您不包含Total,那么您只获得TimeSpan的毫秒组件。

答案 1 :(得分:1)

 var time = t.Milliseconds;

应该......

 var time = t.TotalMilliseconds;