【发布时间】:2012-08-28 08:27:47
【问题描述】:
我们正在调试一些性能问题,并注意到秒表的一些奇怪结果。
- 我们有一个调用 Web 服务的客户端
- 我们使用秒表在服务层 og Web 服务记录时间
- 我们用 datetime.now.ticks 在底层记录时间
第 2 层只是具有 2 行日志记录的传递层。
记录的时间是:
- 110 毫秒
- 52125 毫秒
- 125 毫秒
我们曾预计 2 小于 1,尽管没有 api 精确到 1 毫秒。
我们在每个服务调用中创建一个新的秒表,因此这不是旧秒表重新启动的时间。
有人知道我们为什么要得到这些数字吗?
编辑
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 进行日志记录。
【问题讨论】:
-
给我们看时间计算的代码!我希望那里有错误。例如。毫秒而不是 TotalMilliseconds
-
你用
StopWatch记录时间?您的层不是在不同的应用程序域中运行吗?它们在同一台机器上运行吗?请出示您如何获得这些数字的代码。 -
第三层的计算应该是
new TimeSpan(DateTime.Now - StartTime).TotalMilliseconds -
如果您想使用
DateTime进行计时,您应该使用DateTime.UtcNow,而不是DateTime.Now。第二个比第一个慢得多,因为它必须处理时区。 -
@Jodrell:
StopWatch比DateTime.UtcNow好,但您只能使用它在单个进程中执行计时。如果您想在多个进程或主机之间执行计时(显然它已在问题中完成),您需要记录时间,我的评论很简单,您应该更喜欢DateTime.UtcNow而不是DateTime.Now。