应用程序中短期线程的起源

时间:2017-02-13 22:52:22

标签: c# .net multithreading c#-4.0 profiling

我目前正在检查一个在大量使用过程中遇到UI口吃的应用程序。

对Visual Studio 2015使用Microsoft Concurrency Visualizer扩展名表明,在执行约100毫秒后,会创建并停止相当多的短期线程。 不幸的是,他们显示的callstack就像 clr.dll!0x98071 ntdll.dll!0x634fb ,我不太确定如何从中提取有用的信息。

我不知道这些线程的目的是什么,以及应用程序中哪些部分代码正在创建它们。

如何更好地确定每个人的起点?

在代码中,我能够使用一些Task,另一个QueueUserWorkItems,几十个普通的Thread实例,一些System.Threading.Timer& System.Timers.Timer,没有Reactive Extensions。我为所有人设置了断点,但似乎我错过了一些......

我不认为那些来自线程池,因为它们将在并发可视化器中以同步状态显示,而不是它们刚刚结束,而另一个具有另一个Id的后来创建。但也许我误导了。

我们还使用了一些第三方库和一堆JuggerNET生成的代码,所以原点甚至可能不在应用程序本身。

1 个答案:

答案 0 :(得分:0)

我终于能够通过仔细查看一些神秘的callstack来找到那些短命线程的罪魁祸首,其中包括:

mmdevapi.dll
wdmaud.drv
avrt.dll
audioses.dll

这让我想到我应该仔细检查声音警报系统。确实是这个产生了这些线程。

注意:

我不会接受我的回答,因为我希望有人分享更好的流程或任何类型的提示和技巧来诊断不需要的线程来源。