我有一个WCF REST Web服务(.NET 4),它是基于多层体系结构(即表示,逻辑,数据访问等)设计的。在运行时并且没有检测,我想测量单个请求为每个层花费多少时间(例如,Presentation = 2 ms,Logic = 50 ms,Data = 250 ms)。
考虑到我无法更改方法签名以传递StopWatch(或任何类似的东西),您将如何完成此类操作?
谢谢!
答案 0 :(得分:1)
如果无法在解决方案中添加代码,最终将使用分析器来检查代码的作用,但我只建议在除生产之外的环境中,除非您只是在性能方面存在问题。有很多方法可以在负载下设置另一个环境和配置文件。
Profilers将挂钩您的代码并检查每个方法花费的时间。没有“这是业务层性能”的神奇之处,因为分析器实现了物理边界(类,方法)而不是逻辑边界,但是您可以检查输出并确定速度。
如果您可以触摸代码,则可以添加其他可以通过配置打开和关闭的选项。既然你已声明你不能改变代码,我想这是一个非选择。
答案 1 :(得分:0)
我最近一直致力于性能增强和查看.NET性能工具。到目前为止,DotTrace似乎是最佳候选人。
特别是Performance Profiler可以生成跟踪配置文件。这些配置文件详细说明了每种方法的使用时间:
跟踪性能分析是一种非常准确的分析方法 无论何时输入或离开功能,都会从CLR收到通知。 这两个通知之间的时间被视为执行 功能的时间。跟踪分析有助于您了解精确的时间安排 信息和功能级别的呼叫数量。
此屏幕截图显示了该工具可以生成的有用统计数据:
通过检查分析数据,您应该能够确切地看到每个层对单个请求花费的时间。
答案 2 :(得分:0)
有tracer in the MS Ent Libs,从语法上讲,您使用using
语句,并且using语句中发生的所有内容的持续时间都会记录到标准的Ent Lib日志记录生态系统中。
使用(新Tracer()) { //你的代码在这里 }
更多basic info on MSDN here和see here for it's constructors;有不同的构造函数允许您传入不同的标识符,以帮助您跟踪记录的内容。