2011-04-15 213 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