2010-04-01 98 views
3

大家都同意爲服務器應用程序使用性能計數器的價值。服務器開發中的性能計數器

我想知道如何使用C#實現這些。

通常性能計數器具有以下屬性:

  1. 它們將共享/全球
  2. 寫作需要鎖來確保同步
  3. 有時讀取需要鎖太

是更好地更新他們異步?使它們異步的最佳方式是什麼?

我打算使用ThreadPool.QueueUserWorkItem()函數。你對此有何看法?

如果我的問題看起來有點含糊,請看看HelloWorld WCF服務。

我也想了解以下內容:

  1. 多少次它被整體命中和一定時期的整體
  2. 平均/最小/最大響應時間內和一定時期

如果任何人知道任何專門的方法來在.NET或WCF中做到這一點,請讓我知道。

+0

我已經看到某種特殊類的這個任務,但我沒有意識到任何人都可以幫我分享一些關於這些的文章。 – 2010-04-01 05:55:06

回答

3

如果使用.NET classes用於這一目的沒有必要手動鎖定性能計數器的遞增,遞減和查詢 - 框架會爲你做的。

如果您需要在本機代碼中使用性能計數器,您仍然應該使用InterlockedIncrement()和朋友。

我認爲更新性能計數器異步並不是一個好主意,但你的milage可能會有所不同。如果關於一些有趣情況的數據在事實之後到達,那麼它可能被認爲不太有用。在所有情況下,我會而不是只是爲了更新性能計數器而對ThreadPool施加壓力。現在,如果您需要在線程中觸發櫃檯的工作,那當然會有所不同。

一般來說,我不認爲性能計數器的更新確實是一個瓶頸,而是收集用於更新計數器的數據。

例如,NET GC內存性能計數器只有在GC實際發生時纔會更新,因爲跟蹤信息(在後臺)只是爲了更新計數器,每次更新計數器都會太昂貴(對不起,這裏沒有提及,但MS博客關於該特定主題的條目)。

最後,請注意,WCF already provides開箱即用的相當大數量的計數器,可能涵蓋您現在已經想要的所有計數器。