在性能監視器中監視我的.NET應用程序我可以看到.NET CLR LocksAndThreads /#當前邏輯線程隨着時間穩定增加(當前爲293),表示線程堆棧正在泄漏。當前邏輯線程增加/線程堆棧正在泄漏
我可以找到很多文章告訴我這是問題,但沒有告訴我如何找到原因 - 我從哪裏開始?溫博格能告訴我問題在哪裏?
這是我在3小時性能監控告訴我現在的邏輯線程是150:
這是線程窗口的輸出,它並沒有告訴我,因爲我不能訪問他們的調用堆棧 - 它們大多被標記爲[不可用]或[在睡眠中,等待或加入] | [外部代碼]:
Unflagged 141024 124 Worker Thread <No Name> Normal
Unflagged > 0 0 Unknown Thread [Thread Destroyed]
Unflagged 136272 2 Worker Thread <No Name> Highest
Unflagged 133060 7 Worker Thread vshost.RunParkingWindow [Managed to Native Transition] Normal
Unflagged 136952 10 Main Thread Main Thread [edited].Program.Main Normal
Unflagged 134544 9 Worker Thread .NET SystemEvents [Managed to Native Transition] Normal
Unflagged 136556 11 Worker Thread Worker Thread [edited].MessageService.ProcessJobs.AnonymousMethod__0 Normal
Unflagged 141364 113 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 140896 0 Worker Thread [Thread Destroyed] Normal
Unflagged 136776 19 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 135704 20 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 136712 21 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 134984 22 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 134660 23 Worker Thread Worker Thread [edited].BroadcastService.ProcessJobs.AnonymousMethod__1d Normal
Unflagged 140224 152 Worker Thread <No Name> Normal
Unflagged 140792 157 Worker Thread <No Name> Normal
Unflagged 137116 0 Worker Thread <No Name> Normal
Unflagged 140776 111 Worker Thread <No Name> Normal
Unflagged 140784 0 Worker Thread [Thread Destroyed] Normal
Unflagged 140068 145 Worker Thread <No Name> Normal
Unflagged 139000 150 Worker Thread <No Name> Normal
Unflagged 140828 52 Worker Thread <No Name> Normal
Unflagged 137752 146 Worker Thread <No Name> Normal
Unflagged 140868 151 Worker Thread <No Name> Normal
Unflagged 141324 139 Worker Thread <No Name> Normal
Unflagged 140168 154 Worker Thread <No Name> Normal
Unflagged 141848 0 Worker Thread [Thread Destroyed] Normal
Unflagged 135544 153 Worker Thread <No Name> Normal
Unflagged 142260 140 Worker Thread <No Name> Normal
Unflagged 141528 142 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 141344 0 Worker Thread [Thread Destroyed] Normal
Unflagged 140096 136 Worker Thread <No Name> Normal
Unflagged 141712 134 Worker Thread <No Name> Normal
Unflagged 141688 147 Worker Thread <No Name> Normal
更新: 我,因爲跟蹤的罪魁禍首降到System.Timers.Timer。即使此計時器在每個Elapsed事件中調用了空方法,它仍會無限期地提高邏輯線程數。只需將計時器更改爲DispatcherTimer即可解決問題。
我開始在應用程序中運行!dumpheap -type TimerCallback
時看到大量數據,正如this question中提到的那樣,查看了我應用程序中的所有計時器。
我仍然想知道如何通過Windbg調試檢測到這種情況,而不是通過禁用定時器/檢查性能/重複方法導致我進行修復。即任何可能告訴我哪個定時器正在產生問題的東西。
你知道什麼是創造它們,爲什麼? – 2012-02-21 12:44:02
我的應用程序有很多移動部件,所以「爲什麼」將是許多不同的後臺任務。我試圖找出增加的來源,找出「什麼」。 – DaveO 2012-02-22 09:11:36