测量Web Service每层花费的时间

时间:2011-09-27 17:00:19

标签: c# performance architecture

我有一个WCF REST Web服务(.NET 4),它是基于多层体系结构(即表示,逻辑,数据访问等)设计的。在运行时并且没有检测,我想测量单个请求为每个层花费多少时间(例如,Presentation = 2 ms,Logic = 50 ms,Data = 250 ms)。

考虑到我无法更改方法签名以传递StopWatch(或任何类似的东西),您将如何完成此类操作?

谢谢!

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

我最近一直致力于性能增强和查看.NET性能工具。到目前为止,DotTrace似乎是最佳候选人。

特别是Performance Profiler可以生成跟踪配置文件。这些配置文件详细说明了每种方法的使用时间:

  

跟踪性能分析是一种非常准确的分析方法   无论何时输入或离开功能,都会从CLR收到通知。   这两个通知之间的时间被视为执行   功能的时间。跟踪分析有助于您了解精确的时间安排   信息和功能级别的呼叫数量。

此屏幕截图显示了该工具可以生成的有用统计数据:

enter image description here

通过检查分析数据,您应该能够确切地看到每个层对单个请求花费的时间。

答案 2 :(得分:0)

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

  

使用(新Tracer())   {     //你的代码在这里   }

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