【问题标题】:Performance Counters in Server Development服务器开发中的性能计数器
【发布时间】:2010-04-01 05:35:33
【问题描述】:

你们所有人都同意将性能计数器用于服务器应用程序的价值。

我想知道如何使用 C# 来实现这些。

通常性能计数器具有以下属性:

  1. 它们是共享的/全局的
  2. 写入需要锁以确保同步
  3. 阅读有时也需要锁

异步更新它们更好吗?使它们异步的最佳方法是什么?

我打算使用 ThreadPool.QueueUserWorkItem() 函数。您对此有何看法?

如果我的问题看起来有点模糊,请查看 HelloWorld WCF 服务。

我还想知道以下内容:

  1. 在一定时期内整体被击中的次数
  2. 总体和特定时期内的平均/最小/最大响应时间

如果有人知道在 .NET 或 WCF 中执行此操作的任何专门方法,请告诉我。

【问题讨论】:

  • 我已经看过一些特殊课程来完成这项任务,但我不知道任何人都可以帮助我分享一些关于这些的文章。

标签: .net wcf performancecounter


【解决方案1】:

如果您为此目的使用.NET classes,则无需手动锁定性能计数器的递增、递减和查询 - 框架会为您完成。

如果您需要在本机代码中使用性能计数器,您仍然应该使用 InterlockedIncrement() 和朋友。

我认为异步更新性能计数器不是一个好主意,但你的里程可能会有所不同。如果有关某些有趣情况的数据是在事后到达的,则它可能被认为没那么有用。在所有情况下,我不会仅仅为了更新性能计数器而对 ThreadPool 施加压力。现在,如果您无论如何都需要在线程中执行触发计数器的工作,那当然会有所不同。

一般来说,我认为性能计数器的更新并不是真正的瓶颈,而是用于更新计数器的数据的收集。

例如,.NET GC 内存性能计数器仅在 GC 实际发生时更新,因为跟踪信息(在后台)只是为了在每次发生某些事情时更新计数器成本太高(对不起,这里没有参考,但是有一些关于该特定主题的 MS 博客条目)。

最后,请注意WCF already provides 相当多的开箱即用计数器,这可能已经涵盖了您现在想要的所有内容。

【讨论】:

    【解决方案2】:

    您可以使用标准的 Windows 性能计数器。

    可以使用 system.diagnostics.performancecounter 命名空间从 c# 访问此功能。有关 C# 示例,请参阅:

    http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多