大家都同意将性能计数器用于服务器应用程序的价值。
我想知道如何使用C#实现这些。
通常,性能计数器具有以下属性:
以异步方式更新它们会更好吗?使它们异步的最佳方法是什么?
我打算使用ThreadPool.QueueUserWorkItem()函数。你对此有何看法?
如果我的问题看起来有点模糊,请查看HelloWorld WCF服务。
我也想知道以下内容:
如果有人知道在.NET或WCF中执行此操作的任何专门方法,请告诉我。
答案 0 :(得分:3)
如果您为此目的使用.NET classes,则无需手动锁定性能计数器的增量,减量和查询 - 框架将为您执行此操作。
如果您需要在本机代码中使用性能计数器,您仍然应该使用InterlockedIncrement()和朋友。
我认为异步更新性能计数器不是一个好主意,但你的milage可能会有所不同。如果关于某些有趣情况的数据在事后发生,则可以认为它没那么有用。在所有情况下,我都不对ThreadPool施加压力只是为了更新性能计数器。现在,如果你需要做一个在线程中触发计数器的工作,那当然会有所不同。
通常,我认为性能计数器的更新确实不是瓶颈,而是收集用于更新计数器的数据。
例如,.NET GC内存性能计数器仅在GC实际发生时更新,因为跟踪信息(在后台)只是为了更新计数器每次都有可能太昂贵(抱歉,这里没有参考,但是关于那个特定主题的MS博客文章有一个很好的结合。)
最后,请注意WCF already provides开箱即用的相当多的计数器,这可能涵盖了您现在已经想要的所有计数器。
答案 1 :(得分:1)
您可以使用标准的Windows性能计数器。
可以使用system.diagnostics.performancecounter命名空间从c#访问此功能。有关C#示例,请参阅:
http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx