【问题标题】:Measure the time spent in each layer of a Web Service衡量在 Web 服务的每一层花费的时间
【发布时间】:2011-11-26 05:44:39
【问题描述】:

我有一个基于多层架构(即表示、逻辑、数据访问等)设计的 WCF REST Web 服务 (.NET 4)。在运行时且没有检测的情况下,我想测量每个层的单个请求需要多少时间(例如 Presentation = 2 ms,Logic = 50 ms,Data = 250 ms)。

考虑到我无法更改方法签名以传递 StopWatch(或类似的东西),您将如何完成这样的事情?

谢谢!

【问题讨论】:

标签: c# performance architecture


【解决方案1】:

我最近一直致力于提高性能并研究 .NET 性能工具。 DotTrace 似乎是迄今为止最好的候选人。

特别是,Performance Profiler 可以生成跟踪配置文件。这些配置文件详细说明了每种方法需要多长时间:

跟踪分析是一种非常准确的分析方法,它涉及 每当输入或离开函数时从 CLR 获取通知。 这两个通知之间的时间被视为执行 函数的时间。跟踪分析可帮助您了解精确的时序 函数级别的信息和调用次数。

此屏幕截图说明了该工具可以生成的有用统计信息:

通过检查分析数据,您应该能够准确了解单个请求对每一层花费的时间。

【讨论】:

  • 更多关于为什么使用 dotTrace 的信息会有所帮助(尽管我不是反对者)。
  • @John - 感谢您鼓励我添加答案。希望它更有用。
  • +1。最近没用过dotTrace,不知道这个功能
【解决方案2】:

有一个tracer in the MS Ent Libs,从语法上讲,您使用using 语句,并且在 using 语句中发生的所有内容的持续时间都会记录到标准的 Ent Lib 日志记录生态系统中。

使用(新示踪剂()) { // 你的代码在这里。 }

更多basic info on MSDN heresee here for it's constructors;有不同的构造函数允许您传递不同的标识符,以帮助您跟踪正在记录的内容。

【讨论】:

    【解决方案3】:

    如果您无法将代码添加到您的解决方案中,您最终将使用分析器来检查代码在做什么,但我只建议在生产环境以外的环境中使用,除非您只是遇到性能问题。有很多方法可以在负载下设置另一个环境和配置文件。

    Profilers 将挂钩您的代码并检查每个方法需要多长时间。没有“这是业务层性能”的魔力,因为分析器实现了物理边界(类、方法)而不是逻辑边界,但您可以检查输出并确定速度。

    如果您可以触摸代码,则可以添加其他选项,这些选项可以通过配置打开和关闭。既然你说你不能改变代码,我想这是一个不可选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 2022-08-08
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      相关资源
      最近更新 更多