如何找到Threading.ThreadHelper.ThreadStart()方法的起源

时间:2010-09-06 01:36:38

标签: .net .net-3.5 desktop

我有一个.NET 3.5客户端/服务器应用程序,可以在Windows 2003服务器上运行的本地网络上通过RDP访问。当使用产品的一部分时,当我写的代码都没有实际执行时,屏幕会定期冻结。我使用最新的源代码等在服务器上运行了一个分析器,当延迟发生时(10秒延迟),没有使用处理器时间,也没有执行我的代码。

使用Profiler我发现堆栈跟踪以通用Threading.ThreadHelper.ThreadStart()方法开头。它没有告诉我调用方法的原因是什么,直到我知道我不知道怎么会找到出错的地方。堆栈跟踪通过诸如System.Net.ServicePoint.ReleaseAllConnectionGroups()和System.Net.Sockets.Socket.Close(int timeout)之类的方法进行。我们使用Web服务调用,但它们都不是异步的,并且在延迟时间附近没有任何调用。

由于某种网络超时导致延迟,但我无法判断我是从哪里发起呼叫的。我希望如果我能确定Threading ...方法的起源,我可以弄清楚出了什么问题。我不知道从哪里开始。

2 个答案:

答案 0 :(得分:1)

不要看你没有启动的线程,那个人不能冻结窗口更新。看看你的主线程,找出它阻塞的内容。如果这没有帮助,请在您的问题中发布该线程的实际堆栈跟踪,而不是描述它。

答案 1 :(得分:0)

除了OP提出此问题的原因外,我还可以使用Visual Studio的Threads窗口(可通过主菜单访问)查看原始线程的堆栈跟踪:

 Debug->Windows->Threads