我有一个C#.NET 4.6控制台应用程序,该应用程序应该连续运行(几天/几个月)。但是,在不确定的持续时间之后,所有正在运行的线程将无故冻结(CPU使用率为0%,内存不是特别高),并且尝试将应用程序附加到Visual Studio 2015实例进行调试将失败(按“暂停”将导致Visual Studio停止响应!)。
我检查了并行堆栈跟踪(通过进程浏览器中的转储捕获),没有发现任何死锁迹象(否则显然是罪魁祸首)。
例如,这里有2个被冻结的并行堆栈(即使在我的代码中也不在,但在DirectoryInfo.cs
核心库和ServiceStack OrmLite库中),即使绝对没有理由像这样被卡住。
我以前已经注意到冻结在代码其他部分的这种行为,因此,实际上这些库似乎是冻结的“受害者”,对此不承担任何责任。即使存在我看不到的死锁,也不应阻止这些线程完成,因为它们没有等待任何东西。
最后,终止进程并重新启动该进程将始终允许先前冻结的操作成功运行。
您是否对导致这种奇怪行为的原因有任何线索/对用于获得更多洞察力的工具有任何建议?
最佳答案
似乎两个线程在读取信息时都处于挂起状态(执行读取器从文件读取数据,Enumerator尝试从文件系统读取数据以获取目录信息)。在那个时间点可以访问文件系统吗?您可以访问正在读取的目录吗?
关于c# - 应用程序无缘无故死机,没有死锁,并且不可能附加到Visual Studio进行调试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33495480/