2010-11-12 38 views
2

我有一個應用程序,用戶可以將節點連接在一起執行實時計算。 我希望能夠向用戶顯示CPU使用百分比,以顯示正在使用多少可用CPU時間,以及每節點故障能夠發現問題區域。c#:運行時代碼分析 - 任何現有的庫?

像這樣的運行時分析器是否有任何可用的開源實現? 我可以使用System.Diagnostics.Process.TotalProcessorTime,stopwatches/performancecounters編寫我自己的,但我寧願去嘗試&嘗試的東西,如果可能,稍後可能會提供更詳細的信息。

編輯: 我不想尋找一個獨立的分析器,因爲我想在我的應用程序的UI中顯示實時統計信息。

+0

這聽起來像你只是想要每臺機器或每個進程的CPU使用率,而不是像代碼分析器提供的每種方法細分。 – 2010-11-12 09:11:05

+0

我想要%的總CPU使用率,以及每個計算節點的%。因此,在計算開始和結束每個節點上獲得性能計數器應該足夠了,但稍後我可能想要添加更多關於CPU時間的更深入的信息。 – Pygmy 2010-11-12 09:15:04

+0

只顯示100%。如果它更少,那麼代碼有問題。 – 2010-11-12 12:50:36

回答

1

您可以嘗試商業GlowCode分析器,它具有這樣的功能。

或者開源SlimTune,但它仍然處於測試階段。

+0

這是一個獨立的分析器,但我想在應用程序本身進行分析,以顯示應用程序的用戶界面中的用戶的實時統計數據。 – Pygmy 2010-11-12 10:58:28

+1

++歡迎來到SO! – 2010-11-12 14:46:45

0

我想,你正在運行關閉計時器,好比說每秒10次計算,因爲否則你只是使用CPU的100%(除非你還做了I/O)。

您可以設置鬧鐘中斷一些合理的頻率去了,像10或100赫茲,獨立的任何其他程序做的,甚至尤其是在I/O或其他阻塞時間?

然後,對於每個塊,只需保持最近100次激活中斷的次數。這是你的百分比,並且獲得它的代價很小。

Do塊是否以子程序的形式調用對方?在這種情況下,在每次中斷時,您可能需要在塊之間捕獲調用堆棧,並且如果塊位於堆棧的某個位置,則該塊處於「活動」狀態,並且如果塊位於堆棧的末端,則該塊「正在運行」而不是在調用另一個塊的過程中,而不是在I/O中)。然後你可以選擇每塊表明它正在「碾壓」的時間百分比(在塊上總和不會超過100%)或「活動」(在塊上累加時可能會超過100%)。

後者數量的價值它不會告訴你這麼多「其中」時間都花在,它會告訴你「爲什麼」。這可以回答如下問題:「我看到foo花費了很多時間,但我怎麼得到那裏?」相同的I/O。這也是一個過程,它只發生在其他硬件上。你不想忽視它,因爲如果你這樣做,你最終可能會說「我怎麼只用了一小部分CPU?什麼是搶劫?」

+0

我沒有跑掉計時器,我正在計算和渲染東西,這意味着我受到顯示器垂直刷新的約束,而其他東西也需要時間(例如GPU)。 – Pygmy 2010-11-12 16:44:13

+0

@IUsedToBeAPygmy:好的,這是一個很好的計時器。 – 2010-11-12 17:20:59

+0

@IUsedToBeAPygmy:請注意,即使您的計時器/ vsync正在高速運行,您採用堆棧樣本的速率也不一定很高。它只需要與另一個不相關。 – 2010-11-12 18:31:17