2013-10-23 47 views
6

我想讀取「ASP.NET」性能計數器類別的性能NextValue()。但是這個類別的計數器總是顯示0,而其他計數器按預期工作。ASP.NET性能計數器總是返回0

遠程計算機上perfmon.exe中的「ASP.NET」計數器工作正常。

的「ASP.NET」在PERFMON.EXE在我的本地機器瞄準遠程機櫃臺也顯示爲0。

var pc = new PerformanceCounter("ASP.NET", "Requests Current", "", "myRemoteMachine"); 
pc.NextValue(); // returns always 0 
pc.NextValue(); // returns always 0 

任何想法?許可或某種類型的防火牆問題?

+0

[PerformanceCounter](http://msdn.microsoft.com/library/system.diagnostics.performancecounter.aspx):「要獲得需要初始值或先前值以執行必要計算的計數器的性能數據,調用NextValue方法兩次,並使用您的應用程序需要返回的信息。「 - 也許會做到這一點。 – Corak

+0

不幸的不是。該值保持爲0。 – Mrks83

回答

1

解決方法是在對NextValue的調用之間休眠1秒。

在VB:

Dim cpu As New PerformanceCounter("Processor", "% Processor Time", "_Total", "servername") 

cpu.NextValue() 

System.Threading.Thread.Sleep(1000) 

MyValue = cpu.NextValue() 

很難知道它是否仍然返回正確的號碼,但它是非常接近(1分以內),以什麼性能監視器顯示。我用2秒鐘的時間試了一下,看起來和perfmon顯示的有點接近。

http://blogs.msdn.com/b/dotnetinterop/archive/2007/02/02/system-diagnostics-performancecounter-and-processor-time-on-multi-core-or-multi-cpu.aspx

請記住,你需要推遲呼叫之間「約1秒」到NextValue(),按照文檔!

...和鏈接https://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.nextvalue.aspx,其中規定:

如果計數器的計算值取決於兩個計數器讀,第一次讀操作返回0.0。重置性能計數器屬性以指定不同的計數器相當於創建新的性能計數器,並且使用新屬性的第一個讀取操作返回0.0。建議的NextValue方法調用之間的延遲時間爲1秒,以允許計數器執行下一次增量讀取。