ゆっくりと私は働き過ぎです...
スレッド、タイマー、invoke(BeginInvokeではないため、同期)、およびApplication.DoEventsを備えた巨大なアプリケーションがあります。
ここに投稿するには多すぎて、問題が実際にどこにあるのかわかりません。
私のすべての方法は、トライキャッチの中にあります。すべてのキャッチがログに記録されます。
Visual Studio(F5)からアプリケーションを起動した場合、またはAntsを介してアプリケーションをプロファイリングしている場合は、問題はありません。アプリケーションは数日から実行されます。しかし、Windowsエクスプローラーで同じデバッグバージョンを開始するとすぐに、数時間ごとにフリーズします。例外なくフリーズします。Visual Studioをこのアプリケーションに接続して壊すと、Application.Run(new Form1());で停止します。
私は本当に混乱していて、それを修理する考えがありません。
これは、.net3.5winformsアプリケーションです。
ここに1つのスレッドがぶら下がっているように見えます:
if (grabber.InvokeRequired)
{
Console.WriteLine("grabber.InvokeRequired");
this.Invoke((MethodInvoker) delegate { grabber.Navigate("http://www.google.de"); }); // <-- hang
}
else
{
grabber.Navigate(ig.StartUrl);
}
このスニペットはタイマーイベントの一部です
_timeout = new System.Timers.Timer(10000);
_timeout.Elapsed += new ElapsedEventHandler(OnWatchDogBark);
編集
DoEvents()のサンプル。これはlock()とinvokeにあります
grabber.DocumentCompleted -= grabber_DocumentCompleted;
grabber.Navigate("http://www.google.de");
while (grabber.ReadyState != WebBrowserReadyState.Complete)
{
timeout--;
Application.DoEvents();
Thread.Sleep(200);
if (timeout < 0)
{
timeout = 50;
grabber.Navigate("http://www.google.de");
}
}
現在、System.Windows.Forms.Timerといくつかのロックを使用していますが、改善はありません。
さて、私はいくつかの情報を得るためにWinDbgを使用しました
編集:2012年6月14日
!スレッド
PreEmptive GC Alloc Lock
ID OSID ThreadOBJ State GC Context Domain Count APT Exception
0 1 37ec 007cab18 6020 Enabled 00000000:00000000 007c8510 0 STA System.ArgumentException (02762ba8)
2 2 85b8 007d7c38 b220 Enabled 00000000:00000000 007c8510 0 MTA (Finalizer)
XXXX 3 0 06e9f548 9820 Enabled 00000000:00000000 007c8510 0 Ukn
21 5 3464 0d6dc598 200b020 Enabled 28cb5820:28cb5fe8 007c8510 0 MTA
22 6 62b0 0d6db9e0 200b220 Enabled 00000000:00000000 007c8510 0 MTA
23 7 8e58 0d6db5f8 80a220 Enabled 00000000:00000000 007c8510 0 MTA (Threadpool Completion Port)
XXXX 4 0 06f62d40 1801820 Enabled 00000000:00000000 007c8510 0 Ukn (Threadpool Worker)
XXXX f 0 132a3290 1801820 Enabled 00000000:00000000 007c8510 0 Ukn (Threadpool Worker)
XXXX 10 0 132a3678 1801820 Enabled 00000000:00000000 007c8510 0 Ukn (Threadpool Worker)
XXXX e 0 132a26d8 1801820 Enabled 00000000:00000000 007c8510 0 Ukn (Threadpool Worker)
XXXX 9 0 0d6db210 1801820 Enabled 00000000:00000000 007c8510 0 Ukn (Threadpool Worker)
!dlk
Examining SyncBlocks...
Scanning for ReaderWriterLock instances...
Scanning for holders of ReaderWriterLock locks...
Scanning for ReaderWriterLockSlim instances...
Scanning for holders of ReaderWriterLockSlim locks...
Examining CriticalSections...
Could not find symbol ntdll!RtlCriticalSectionList.
No deadlocks detected.