0

我们正在调试一些性能问题,并注意到秒表的一些奇怪结果。

  1. 我们有一个调用 Web 服务的客户端
  2. 我们使用秒表在服务层记录时间以及 Web 服务
  3. 我们用 datetime.now.ticks 记录下层的时间

第 2 层只是具有 2 行日志记录的传递层。

记录的时间是:

  1. 110 毫秒
  2. 52125 毫秒
  3. 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 进行日志记录。

4

2 回答 2

3

好的,您的第二个代码示例应该返回TimeSpan.TotalMilliseconds,仅使用Milliseconds您将获得第二部分。

为什么不在StopWatch第 3 层代码中使用 a ,与第 2 层代码的样式相同,它更准确?

您的问题标题是“秒表的正确性”,但您似乎正在将香蕉与桃子和苹果进行比较。如果您的硬件或操作系统支持,StopWatch将使用计时器,否则它将回退到提供大约 15 毫秒粒度的计时器。HighResolutionSystem.Timer

我无法评论如何或是否使用 WebSphere,但它不会提供比StopWatch其他高精度时间源的 API 更准确的计时。

于 2012-08-28T09:16:18.580 回答
1

正如我所猜测的:

new TimeSpan(DateTime.Now.Ticks - StartTime.Ticks).TotalMilliseconds 

TotalMilliseconds 以毫秒为单位获取时间跨度

毫秒获取时间跨度的毫秒部分

于 2012-08-28T09:10:18.807 回答