Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 终结器阻塞了应用程序_C#_Multithreading_Deadlock_Crash Dumps_Finalizer - Fatal编程技术网

C# 终结器阻塞了应用程序

C# 终结器阻塞了应用程序,c#,multithreading,deadlock,crash-dumps,finalizer,C#,Multithreading,Deadlock,Crash Dumps,Finalizer,今天我们收到一个挂起的应用程序的崩溃。通过DebugDiag运行,我们得到以下信息: 分析总结 错误 说明建议 此WordHangs.dmp中的终结器线程5被阻止,请查看 用于终结器线程的调用堆栈,以查看终结器是什么 封锁了。终结器线程上长时间运行的代码会增加 准备完成的对象数,这对整个系统不利 进程的内存消耗 查看线程5,我们无法识别线程正在做什么。调用堆栈如下所示: 线程5-系统ID 13636 入口点clr!线程::intermediateThreadProc创建时间 2017年4月19日

今天我们收到一个挂起的应用程序的崩溃。通过DebugDiag运行,我们得到以下信息:

分析总结

错误

说明建议

此WordHangs.dmp中的终结器线程5被阻止,请查看 用于终结器线程的调用堆栈,以查看终结器是什么 封锁了。终结器线程上长时间运行的代码会增加 准备完成的对象数,这对整个系统不利 进程的内存消耗

查看线程5,我们无法识别线程正在做什么。调用堆栈如下所示:

线程5-系统ID 13636

入口点clr!线程::intermediateThreadProc创建时间
2017年4月19日9:32:59在用户模式下花费的时间0天00:00:00.093 在内核模式下花费的时间0天00:00:00.078

此线程未完全解决,可能是问题,也可能不是问题。 可能需要对这些螺纹进行进一步分析

.NET调用堆栈

[[DebuggerU2MCatchHandlerFrame]]

完整调用堆栈

来源

ntdll!NtWaitForSingleObject+15内核库!WaitForSingleObjectEx+98 内核32!WaitForSingleObjectExImplementation+75
clr!CLREventBase::重置+145 clr!CLREventBase::重置+18d
clr!CLREventBase::WaitEx+152 clr!CLREventBase::等待+1a
clr!线程::WaitSuspendEventHelper+8a
clr!线程::WaitSuspendEvents+14
clr!线程::RareEnablePreemptiveGC+8e
clr!线程::RareDisablePreemptiveGC+102
clr!WKS::GCHeap::FinalizerThreadWorker+1b5
clr!线程::DoExtraWorkForFinalizer+1bd
clr!线程::DoExtraWorkForFinalizer+240
clr!线程::DoExtraWorkForFinalizer+5f0
[[debuggeru2mcachhandlerframe]]
clr!WKS::GCHeap::FinalizerThreadStart+1a0
clr!线程::intermediateThreadProc+4d
内核32!BaseThreadInitThunk+e ntdll__RtlUserThreadStart+70
ntdll_RtlUserThreadStart+1b

我们已在加载SOSEX的情况下执行Windb,以识别任何死锁,但没有成功。这是生成的输出:

0:000>!dlk正在检查同步块。。。扫描

ReaderWriterLock(精简)实例。。。扫描身份证持有人

ReaderWriterLock锁。。。扫描ReaderWriterLockSlim的固定器

锁。。。正在检查关键部分。。。扫描等待的线程

同步块。。。扫描等待ReaderWriterLock的线程

锁。。。扫描等待ReaderWriterLocksSlim的线程

锁。。。正在扫描等待关键节的线程

***错误:找不到符号文件。默认为导出MSO.DLL的符号-

***错误:找不到符号文件。默认为VSTOLoader.dll导出符号-

***错误:找不到符号文件。默认为导出WWLIB.DLL的符号-

***错误:找不到符号文件。默认为导出WINWORD.EXE的符号-

***错误:找不到符号文件。默认为为Csi.dll导出符号-

***警告:无法验证aetpkss1.dll的校验和

***错误:找不到符号文件。默认为导出aetpkss1.dll的符号-

未检测到死锁。


有人能告诉我们在哪里查找以确定终结器线程被阻止的原因吗?

在代码中,我们进行了以下调用:

        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();
        GC.WaitForPendingFinalizers();
因为我们在这个问题之后删除了它:


问题已经过去了,所以我想这可能是其中的原因(可能这不是唯一的原因,其他代码也与此相关)。

在代码中,我们有以下调用:

        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();
        GC.WaitForPendingFinalizers();
因为我们在这个问题之后删除了它:


问题消失了,所以我想这可能是其中的原因(可能这不是罪魁祸首,其他代码也与此相关)。

它被阻止,但不是死锁。完全正常的状态,它正在等待一些完成工作。很难猜测为什么DebugDiag会生成此诊断,可能它只是找到了错误的线程。死锁使用COM服务器(如Word)的线程非常容易,您必须查看拥有应用程序对象的STA线程。你问了很多关于这件事的问题,似乎什么都没有得到。是时候请Microsoft支持人员帮忙了。谢谢Hans。转储可能会显示一个被阻塞的线程,但实际上应用程序在挂起时处于死锁状态。关于Microsoft支持,您是对的,我现在正在收集所有信息。当这场噩梦结束时,我会回答我自己的问题(希望如此)。它被阻止了,但没有陷入僵局。完全正常的状态,它正在等待一些完成工作。很难猜测为什么DebugDiag会生成此诊断,可能它只是找到了错误的线程。死锁使用COM服务器(如Word)的线程非常容易,您必须查看拥有应用程序对象的STA线程。你问了很多关于这件事的问题,似乎什么都没有得到。是时候请Microsoft支持人员帮忙了。谢谢Hans。转储可能会显示一个被阻塞的线程,但实际上应用程序在挂起时处于死锁状态。关于Microsoft支持,您是对的,我现在正在收集所有信息。当这场噩梦结束时,我会回答我自己的问题(希望如此)。