Mr.*_*ith 11 .net c# windows multithreading garbage-collection
我在Visual Studio 2010 IDE中以调试模式(F5)在Windows Server GoDaddy VPS上运行.NET 2.0控制台应用程序.
应用程序定期冻结(好像垃圾收集器暂时暂停执行)但是在极少数情况下它永远不会恢复执行!
几个月来我一直在对此进行描述,并且我的想法已经不多了.
任何人都有任何提示,以诊断究竟发生了什么?
Han*_*ant 16
它也是多线程的
这是问题的关键部分.您正在描述多线程程序可能出错的非常典型的方式.它遇到了死锁,这是线程的典型问题之一.
它可以从信息进一步缩小,显然你的过程没有完全冻结,因为它仍然消耗100%的CPU.您的代码中可能有一个热等待循环,一个循环在另一个发出事件信号的线程上.这可能会导致一种特别令人讨厌的各种僵局,一种活锁.实时锁定对时序非常敏感,代码运行顺序的微小变化可能会将其变为实时锁定.再次退出.
实时锁非常难以调试,因为尝试这样做会使条件消失.就像附加调试器或破坏代码一样,足以改变线程时序并使其超出条件.或者在代码中添加日志记录语句,这是调试线程问题的常用策略.这会因记录开销而改变时序,这反过来会使实时锁完全消失.
讨厌的东西,不可能从像SO这样的网站获得这样的问题的帮助,因为它非常依赖于代码.通常需要彻底检查代码才能找到原因.并不是很少重写.祝它好运.
| 归档时间: |
|
| 查看次数: |
1702 次 |
| 最近记录: |