Приложение зависает за пределами Visual Studio. При запуске из Visual Studio он работает

медленно я переутомляюсь ...

У меня есть огромное приложение с потоками, таймерами, вызовом (не BeginInvoke, поэтому он синхронный ) и Application.DoEvents.

Здесь слишком много постов, и я не знаю, в чем проблема на самом деле.

Каждый мой метод находится внутри try catch. Каждый улов регистрируется.

Если я запускаю свое приложение из Visual Studio (F5) или профилирую его через Ants, проблем нет. Приложение работает с нескольких дней. Но как только я запускаю ту же отладочную версию через проводник Windows, она зависает каждые несколько часов. Он замерзает без каких-либо исключений или около того. Если я прикреплю визуальную студию к этому приложению и сломаю ее, она остановится на Application.Run(new Form1());

Я совсем запутался и понятия не имею, как его починить.

Это winforms-приложение .net 3.5

Похоже, здесь зависает один поток:

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(). Это в блокировке () и в вызове

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 для получения информации

Редактировать: 14.06.2012

!threads

                                      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.
11
задан CharithJ 26 July 2015 в 01:49
поделиться