我注意到,在我的許多服務中(使用多個線程)線程ID不斷增加它們的值。這是麻煩的跡象嗎?我以某種方式不回到池中,或者這個值是否會增加正常行爲?ManagedThreadId不斷增加
回答
只要你的線程正在返回(而不是阻塞,等待,睡眠或無限循環),那麼你沒事。 ManagedThreadId僅僅是一個唯一的標識符,它不是一個「線程數」在所有(http://msdn.microsoft.com/en-us/library/system.threading.thread.managedthreadid.aspx)
Thread.ManagedThreadId
,表示此唯一標識符的整數託管線程。
爲了確保您的線程正在返回,請在VS調試器中暫停您的進程並告訴它凍結所有線程並查看線程調試窗口。在運行時環境中,我會修改線程代碼以增加一個鎖定的整數,並在線程返回時遞減相同的鎖定整數(使用try/finally塊確保拋出的異常不會導致整數遞減被遺漏) 。
感謝您的建議@David。這一切似乎都運行良好,但我注意到幾天後,id值超過了數百。 –
另外不要忘記,CLR運行自己的線程,比如GC和COM支持所需的其他線程(即使你不使用COM)。 – Dai
'正確'的答案是不,這是不正常的。不像CLR被打破。你的應用程序應該(大多數情況下,除非你有一些很好的理由,我甚至無法想象它會是什麼),請仔細使用Thread線程。如果您正在創建其他100個線程,則99%會做錯事。
你要麼殺死你應該重新使用它們的線程,要麼在你使用線程線程的地方使用線程池線程。
編輯好的。你可能不相信我。但是MSDN也這麼說:
即使承載公共語言運行庫的非託管代碼將線程實現爲光纖,ManagedThreadId屬性的值也不會隨時間而變化。
所以只是爲了強調它(我沒有在第一次嘗試中明確)......你沒有看到線程ID在現有線程中發生變化。你看到不同的線程彈出(用你自己的話說在幾百個)......新的線程獲得新的ID。 舊線程不會更改其ID。
它不是線程的數量,而是不斷增加整數值的線程ID。 –
我的前提是,當您通過th = new Thread()創建新線程時ID會增加; (或者你的線程池已經耗盡,它正在創建新的線程)......我的前提是一旦線程被創建,它就不會改變它的ID。我很想看到一個可能證明我錯誤的代碼。 –
我知道,他們是新主題。低數字不會被重用似乎很奇怪。 –
- 1. cmd.ExecuteNonQuery不斷增加
- 2. MongoDB連接不斷增加
- 3. Encog:重量不斷增加
- 4. javascript:價值不斷增加
- 5. PHP底片不斷增加
- 6. 反射類不斷增加
- 7. Rails不斷增加內存
- 8. java pid不斷增加
- 9. Memcached php session不斷增加
- 10. Cassandra連接不斷增加
- 11. JavaScript聽衆不斷增加
- 12. ManagedThreadID不是唯一的嗎?
- 13. vs2015不斷增加project.lock.json到TFS
- 14. 爲什麼Libgdx不斷增加堆?
- 15. 工作流程不斷增加
- 16. adb設備 - 設備不斷增加
- 17. RxIoScheduler線程數不斷增加
- 18. MQ過程amqrmppa不斷增加
- 19. Intellij Idea:不斷要求增加內存
- 20. 分配的內存不斷增加
- 21. Salesforce API請求數量不斷增加
- 22. MQ SYSTEM.CLUSTER.REPOSITORY.QUEUE深度不斷增加
- 23. 文件大小不斷增加
- 24. Expression_Host程序集數量不斷增加
- 25. JMeter - 響應時間不斷增加
- 26. 爲什麼MongoDB存儲不斷增加?
- 27. ios arc UILabel.text內存不斷增加
- 28. T-SQL更新值不斷增加
- 29. Swift ios 10 NavBar項目不斷增加
- 30. Python +不斷增加的內存分配
他們是ThreadPool線程嗎?如果沒有,這聽起來很正常。 – spender
奇怪的是,你會認爲他們失敗或保持平等不成問題。 –