簡體   English   中英

C#:線程工作負載和內存使用情況

[英]C# : Thread Workload and Memory useage

Windows Taskmanger可以檢查應用程序的CPU和內存使用情況,但在我們的程序中,我們有不同的線程,我們想知道每個線程上有多少ammount。

我們希望在運行時使用外部程序以及應用程序本身進行檢查。 如果一個線程可以告訴他的內存和CPU使用情況會很棒。

這是示例:您有threadA和ThreadB。 ThreadA創建一個對象X.ThreadB使用該對象。 那么你想在線程的信息中看到什么? 誰創建了對象或誰在使用它? 你唯一能看到的是使用線程AFAIK的CPU時間多少而且我所知道的唯一一個在進程上顯示MAX信息的程序是Process Explorer。 http://technet.microsoft.com/en-us/sysinternals/bb896653

您可以使用性能監視器來查看為進程分配了多少內存,但是對於其中的單個線程,您看不到相同的內存。

但是,您可以創建自定義性能計數器,以在代碼中顯示要監視的任何值。

SysInternals Process Explorer具有此功能,請檢查此服務器故障線程

CodeProject上有一個開源項目,截圖看起來很有希望: 如何獲得進程和線程的CPU使用率 ,但是演示項目似乎在Win7上崩潰(可能缺少一些特權)。

[編輯]如果你想自己編寫,可以P / Invoke Thread32FirstThread32Next函數枚舉單個進程中的線程,然后使用QueryThreadCycleTime查詢每個線程的CPU時間。

對象在線程之間共享,線程不擁有對象。

對象的內存在堆上分配,堆位於應用程序的領域。 任何線程都可以在應用程序的生命周期內隨時訪問任何此內存。

無法確定哪個線程正在使用或可能正在使用任何任意內存塊。

線程執行工作單元。 除非您知道哪個線程將運行哪個工作單元,否則您將無法獲得CPU使用率的可靠指標。 如果您確實知道哪個線程將執行哪些任務,則SysInternals的Process Explorer具有此度量標准。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM