我注意到在我的许多服务(使用多个线程)中,线程ID不断增加其值。这是一个麻烦的迹象吗?我不知道是不是将它们返回到池中,还是这个值会增加正常行为?
答案 0 :(得分:3)
只要您的线程正在返回(而不是阻塞,等待,休眠或无限循环),那么您就可以了。 ManagedThreadId只是一个唯一标识符,根本不是“线程计数”(http://msdn.microsoft.com/en-us/library/system.threading.thread.managedthreadid.aspx)
Thread.ManagedThreadId
表示此托管线程的唯一标识符的整数。
为确保您的线程正在返回,请在VS调试器中暂停您的进程并告诉它冻结所有线程并查看Threads调试窗口。在运行时环境中,我修改线程代码以增加锁定的整数,并在线程返回时减少相同的锁定整数(使用try / finally块确保抛出的异常不会导致错过整数减量)
答案 1 :(得分:1)
'正确'的答案是不是不正常。不像CLR坏了。你的应用程序应该(大多数情况下,除非你有一些非常好的理由,我甚至无法想象它可能是什么)仔细使用Thread线程。如果您正在创建其他100个线程,则99%做错了。
您要么杀死应该重新使用它们的线程,要么在使用线程线程时使用线程池线程。
编辑好的。你可能不相信我。但MSDN也这么说:
ManagedThreadId属性的值不会随时间变化,即使承载公共语言运行库的非托管代码将线程实现为光纤。
所以只是再次强调它(我在第一次尝试中没有说明)...你没有看到现有线程中的线程ID发生变化。你会看到不同的线程弹出(用你自己的话说成数百个)....新线程获得新的ID。 旧帖子不会更改其ID。