默认的.NET 4.5 Windows服务上的死线程

时间:2013-05-28 01:45:08

标签: .net multithreading windows-services

我们有一个.NET 4.0 Windows服务,现在已经使用了很长时间。 Windows服务基本上使用后台线程处理大量文件。我们使用ThreadPool类,而不是Thread类。当Windows服务开始遭受性能下降时,我们采取的步骤之一是使用DebugDiag获取进程的转储。该报告表明该过程有死线。每个转储的死线数也不同。

经过一些研究,我们遇到一个条目,解释死线程是托管线程对象,其中底层本机线程不再存在。这些死线程可能只是ThreadPool中的托管线程吗?如果是这样,为什么ThreadPool会有已经死的托管线程。

为了进一步调查我们死线程的原因,我们尝试分析一个空白Windows服务的转储。在本练习中,我们不断在报告中看到3个死线程。我们使用的Windows服务是使用Visual Studio 2012创建的默认Windows服务,没有用户代码,空白的OnStart和OnStop方法,除了VS2012添加的引用之外没有终结器和其他库引用。

以下是我们对死线程的主要关注:   - 这些死线程是否适用于任何.NET Windows服务?   - 什么通常导致死线?   - 死线程是否导致内存泄漏?   - 死线程导致CPU未得到充分利用吗?   - 我们是否应该关注这些死神?

0 个答案:

没有答案