我正在尝试记录某些方法在我的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) 完成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票 - 我认为这是一个很好的问题,希望有助于其他人。
答案 0 :(得分:2)
您需要t.TotalMilliseconds
,不需要t.Milliseconds
。如果您不包含Total,那么您只获得TimeSpan
的毫秒组件。
答案 1 :(得分:1)
var time = t.Milliseconds;
应该......
var time = t.TotalMilliseconds;