我怎么才能知道.NET线程占用的资源?

问题描述:

我正在开发一个多线程应用程序,并且我的某个线程被某种东西阻塞了,因此它将永远占用一些资源,如文件。有没有办法找出哪个线程被阻塞,更重要的是该线程正在维护什么资源?我怎么才能知道.NET线程占用的资源?

最后和往常一样,感谢您的耐心和答复。 :)

---------新进展----------

由于所有的Windows平台上resouces通过 “手柄” 访问。我在想如果有一种方法可以列出.NET线程持有的所有句柄?

当您创建线程时,您可以在启动它之前为每个线程设置一个名称。然后,您可以在调试器中使用它们来识别有问题的线程。

然后当你的程序没有关闭,你跳到调试器并点击暂停,然后你可以通过活动线程。 调试 - > Windows的>主题(CTRL-ALT + H)

如果你的线程并不重要,只是想和你的系统完成后要关闭,你可以在线程上设置.IsBackground和你不需要执行任何特殊操作以使您的线程关闭,虽然这可能会导致其他您不期望的情况。

我个人也使用System.Threading.AutoResetEvent(duration)而不是Sleep(duration),因为如果我想退出,我设置了mIsRunning=false然后设置将导致事件停止唤醒但立即退出的事件。休眠必须在恢复之前完成。

Visual Studio 2010中新的并发事件探查器的构建是为了回答和解决这类问题。

Resource Contention Concurrency Profiling in Visual Studio 2010 – Performance Investigation Flows

我建议下载试用版,如果你还没有拥有Visual Studio 2010中,您会不会感到失望。 :)

如果您熟悉使用WinDbg进行转储分析,您也可以在发生此问题时捕获挂起转储,然后手动分析转储以查看哪个线程挂起以及为什么挂起。

http://blogs.msdn.com/tess/archive/tags/Performance+issues+and+hangs/default.aspx