软件产品常常会出现这样的情况:产品性能因某些无法预料的瓶颈而受到干扰,导致程序的处理效率降低,性能得不到充分的发挥。如何快速有效地找到软件产品的性能瓶颈,则是我们感兴趣的内容之一。
性能计数器的确是Windows Server中一款非常强大的工具,它可以让你及时了解到服务器的各项性能指标,从而你可以知悉服务器的运行状态是否正常,帮助你分析定位服务器可能出现的问题。具体可以参看 利用Windows性能计数器(PerformanceCounter)监控。
三种不同的WCF相关性能计数器与.NET Framework 3.5 一起安装。在性能监控器中,你可以在ServiceModelService,ServiceModelEndpoint和ServiceModelOperation下面看到这些计数器。你可以选择通过配置来为你的应用程序开启这些
WCF性能计数器级别之服务性能计数器
服务性能计数器将服务行为作为整体来进行衡量,可用于诊断服务整体性能。如果使用性能监视器查看,可以在 ServiceModelService 3.0.0.0 性能对象下找到服务性能计数器。使用以下模式命名计数器实例:
ServiceName@ServiceBaseAddress服务范围内的计数器是从终结点集合中的计数器聚合来的。
创建新的 InstanceContext 时,用于创建服务实例的性能计数器将递增。请注意,即使在(通过现有服务)收到非激活消息时,或在从一个会话连接到实例、结束会话然后从其他会话重新进行连接时,也将创建新的 InstanceContext。
WCF性能计数器级别之终结点性能计数器
使用终结点性能计数器可以查看反映终结点如何接受消息的数据。使用性能监视器查看时,可在 ServiceModelEndpoint 3.0.0.0 性能对象下找到终结点性能计数器。使用以下模式命名计数器实例:
(ServiceName).(ContractName)@(endpoint listener address)数据与为单个操作收集的数据类似,但它只在终结点之间聚合。
终结点范围内的计数器是从操作集合中的计数器聚合来的。
注意: 如果两个终结点具有相同的协定名称和地址,它们将映射到同一个计数器实例中。
WCF性能计数器级别之操作性能计数器
如果使用性能监视器查看,可以在 ServiceModelOperation 3.0.0.0 性能对象下找到操作性能计数器。每个操作都有一个单独的实例。也就是说,如果给定的协定具有 10 个操作,则有 10 个操作计数器实例与该协定相关联。对象实例按下面的模式命名:
(ServiceName).(ContractName).(OperationName)@(first endpoint listener address)使用此计数器可以衡量调用的使用方式以及操作的执行情况。
当计数器在多个范围内可见时,从范围的较高一级收集到的数据会与从范围的较低一级收集到的数据相聚合。例如,终结点处的 Calls 表示终结点内所有操作调用的总和;服务处的 Calls 表示对服务内所有终结点的所有调用的总和。
下面我们来讨论下WCF和ASP.NET Web API 接口执行时间监控,下面是我网上找到的相关解决方案
Capturing WCF Request Execution Time :通过性能计数器和DispatchMessageInspector实现接口执行时间的统计
Tracing in ASP.NET Web API:通过Trace功能统计执行时间
http://www.strathweb.com/2012/11/realtime-asp-net-web-api-tracing-with-signalr/
https://gist.github.com/3174719
http://www.cnblogs.com/icuit/archive/2012/12/09/2810482.html
http://dkochnev.blogspot.com/2011/06/wcf-framework-40-monitoring-service.html
http://kleindublin.blogspot.com/2009/02/wcf-event-log-entry-servicemodelservice.html
http://blogs.microsoft.co.il/blogs/idof/archive/2011/08/11/wcf-scaling-check-your-counters.aspx
http://www.cnblogs.com/danielWise/archive/2011/02/22/1960320.html