我们正在调试一些性能问题,并注意到秒表的一些奇怪结果。
第2层只是一个带有2行记录的传递层。
记录的时间是:
我们原本预计2会小于1,但没有api精确到1 ms。
我们在每个服务电话中创建一个新的秒表,所以这不是旧秒表重新启动的时间。
任何人都知道我们为什么会得到这些数字?
修改
2和3位于同一台计算机和相同的应用程序域
秒表代码是:
var sw = new Stopwatch();
sw.Start();
//code to call layer 3
sw.Stop();
orchestrationContext.LogOperationTime(functionName, sw.ElapsedMilliseconds);
在第3层记录时间
protected DateTime StartTime { get; set; }
StartTime = DateTime.Now;
// code
new TimeSpan(DateTime.Now.Ticks - StartTime.Ticks).Milliseconds
1的日志记录位于单独的计算机上,使用Websphere进行日志记录。
答案 0 :(得分:3)
好的,您的第二个代码示例应该返回TimeSpan.TotalMilliseconds
,仅使用Milliseconds
您将获得第二部分。
为什么不在第3层代码中使用StopWatch
,与第2层代码的风格相同,它更准确?
您的问题标题是“StopWatch的正确性”,但似乎您正在将香蕉与桃子和苹果进行比较。如果您的硬件或操作系统支持,StopWatch
将使用HighResolution
计时器,否则它将回退到System.Timer
,其提供大约15毫秒的粒度。
我不能评论如何或是否使用WebSphere,但它不会提供比StopWatch
更准确的时序,除非它使用API来处理其他一些高精度时间源。
答案 1 :(得分:1)
正如我猜测的那样:
new TimeSpan(DateTime.Now.Ticks - StartTime.Ticks).TotalMilliseconds
TotalMilliseconds获取以毫秒为单位的时间跨度
毫秒获得时间跨度的毫秒部分