我正在尝试记录某些方法在我的 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 票 - 我认为这是一个很好的问题,希望能帮助其他人。