2009-01-02 25 views
1

我試圖創建一組自定義性能計數器以供我的ASP.NET應用程序使用。我使用下面的代碼來遞增計數器:ASP.NET/C# - 自定義PerformanceCounters只顯示在64位系統上的32位perfmon

internal static void Increment(String instanceName, DistributedCacheCounterInstanceType counterInstanceType) 
{ 
    var permission = new PerformanceCounterPermission(PerformanceCounterPermissionAccess.Write, Environment.MachineName, "CounterName"); 
    permission.Assert(); 

    var counter = new PerformanceCounter("CategoryName", "CounterName", instanceName, false); 
    counter.RawValue++; // Use RawValue++ instead of Increment() to avoid locking 
    counter.Close(); 
} 

這工作完全在單元測試中,並在卡西尼我開發框(Vista商業版64位),我可以看在性能監視器工作的計數器。但是,計數器似乎沒有在我的生產環境中註冊任何增量(Win Server 2003 x64)。計數器實例本身可用,但它們都只顯示「 - 」表示最後/平均/最小/最大顯示。

任何想法,我可能做錯了什麼?

編輯:這裏的a [perhaps somewhat outdated] MSDN article that I used for reference

編輯2:我使用VS 2008/.NET框架V3.5 SP1,如果有什麼差別。

編輯3:剛剛發現this article about 32 bit/64 bit app and monitor mismatching,但我不確定它是如何適用於我的情況,如果有的話。卡西尼的確是一款32位應用程序,但我在查看64位系統上的值時沒有問題。在我的生產服務器上,應用程序和系統都是64位的,但我看不到這些值。

EDIT 4:示出了,當我運行生產服務器上的32位性能監視器。所以我想現在的問題是爲什麼我不能讀取64位perfmon中的值?

編輯5:它實際上似乎是工作,只是因爲它是在計數器創建之前打開,所以我不得不重新啓動我的perfmon實例。

回答

1

我讀到,實例化PerformanceCounter是相當資源密集型的。你有沒有想過將這些緩存在會話/應用程序變量中?

另外,更新計數器而不鎖定多線程ASP.net應用程序是明智嗎?

Patrick Patrick

+0

實例化我的計數器似乎存在一點開銷,但此時僅需要緩存是不夠的。 – 2009-01-12 17:25:59

相關問題