piano piano sto oberati di lavoro ...L'applicazione si blocca all'esterno di Visual Studio. Mentre a partire da Visual Studio funziona
Ho un enorme applicazione con filettatura, timer, richiamare (non BeginInvoke, quindi è sincrono) e Application.DoEvents.
È troppo per postare qui e non so dove sia realmente il problema.
Ogni mio metodo è all'interno di un tentativo di cattura. Ogni presa è registrata.
Se avvio la mia applicazione da Visual Studio (F5) o mentre la sto profilando tramite le formiche non ci sono problemi. L'applicazione funziona da alcuni giorni. Ma non appena avvio la stessa versione di debug tramite Windows Explorer, si blocca ogni poche ore. Si blocca senza alcuna eccezione o così. Se collego Visual Studio a questa applicazione e la interrompo, si ferma su Application.Run (new Form1());
Sono davvero confuso e non ho idea di ripararlo.
Si tratta di un'applicazione .NET 3.5 WinForms
Sembra che un thread si blocca qui:
if (grabber.InvokeRequired)
{
Console.WriteLine("grabber.InvokeRequired");
this.Invoke((MethodInvoker) delegate { grabber.Navigate("http://www.google.de"); }); // <-- hang
}
else
{
grabber.Navigate(ig.StartUrl);
}
questo frammento è parte di un evento timer
_timeout = new System.Timers.Timer(10000);
_timeout.Elapsed += new ElapsedEventHandler(OnWatchDogBark);
Modifica
Un esempio per DoEvents(). Questo è in un blocco() e in un invocare
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");
}
}
Attualmente io uso lo System.Windows.Forms.Timer e alcune ciocche, ma non v'è alcun miglioramento.
Va bene ho usato WinDbg per ottenere alcune informazioni
Edit:!! 14.06.2012
discussioni
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.
Hai una situazione di stallo nelle tue mani. Questi sono difficili da diagnosticare, però. – zmbq
potrebbe essere una perdita di memoria che fa esaurire la memoria [perdita di memoria in c sharp] (http://stackoverflow.com/questions/620733/memory-leak-in-c-sharp), [how-to-detect-memory -leaks in-c-sharp-application] (http://stackoverflow.com/questions/2259433/how-to-detect-memory-leaks-in-c-sharp-application)? – PresleyDias
Sì, direi lo stesso di zmbq. Eseguirlo dall'IDE rallenta enormemente, quindi è meno probabile che si verifichino blocchi dalla concorrenza. –