2011-04-15 223 views
0

我有一个C#winforms应用程序,该应用程序与各种com数据源进行通信,并在其大部分后端处理中使用线程池。我注意到,每天2-3次winforms线程挂起20-30秒(在ui中可见,并且com数据停止20-30秒)。因为我已经写在跟踪上的WinForms线程心跳检测这些情况下,线程池一个简单的任务,但我在寻找一种方式来自动触发一个完全转储(不是一个小型转储),这样我就可以看到究竟是什么winforms线程在这些暂停期间正在执行。调试Windows窗体线程冻结

是否有任何简单的命令行应用程序,我的后台线程可以在它自己的过程叫绑定到应用程序的调试程序,生成完整的转储文件,然后允许应用程序恢复?

有没有更好的方法来调试呢?

+0

像这样的延迟可能是由完整的垃圾收集引起的。启用gcServer或应用程序耗尽并发/后台GC跟上的能力。线程将被阻塞,包括您的看门狗线程,除非您设法使其不分配任何GC内存。 – 2011-04-16 15:09:38

回答

0

可以使用的Sysinternals procdump实用程序来生成转储文件:

ProcDump是一个命令行实用程序 ,其主要目的尖峰 期间监视CPU峰值的 应用和 产生故障转储管理员或开发人员可以使用 确定高峰期的原因。

0

听起来像Process Dumper应该做的伎俩。

+0

优秀的工具 - 但它不会安装在Win 7上 - 任何类似的工具适用于以后的操作系统? – Superman 2011-04-15 05:19:28