Я работаю над приложением и обнаружил, что при удаленном подключении через TeamViewer и Radmin приложение зависает.
Когда он зависает, исключений нет, ui не отвечает и этот процесс НЕ вешается в мониторе ресурсов или в проводнике процессов.vb.net application freezes with TeamViewer
Некоторые основные спецификации для приложения: Подключается к 2 COM-портам. Один для ввода, один для вывода. Выходной сигнал COM также должен поддерживать живой сигнал каждые 5 секунд. Существует 4 потока рабочего рабочего, выполняющих различные задачи, начиная с обновлений пользовательского интерфейса и заканчивая речевым выходом, а также обрабатывая ввод данных. Пользовательский интерфейс отображает данные в реальном времени из трех отдельных источников данных. Два COM-порта, один из которых - MS SQL.
RDP не повесил приложение вообще.
Любые идеи о том, что может быть причиной этого?
Он работает на .NET 4.5.1, построенном в VS Ultimate 2013 с базой данных SQL 2012.
Я попытался изменить между 64-битным и 32-битным без каких-либо успехов.
EDIT Ответы на fsintegral.
- Все петли в приложении заканчиваются, но вызываются очень часто. Каждый таймер имеет повторение 1,5 - 5 секунд, и есть моменты, когда процесс в таймере занимает больше времени тика. Таймеры все обращаются к фоновому работнику и проверяют на .isBusy перед запуском процесса, чтобы избежать совпадения.
Таймеры предназначены для бесконечного запуска, но это отличается от бесконечного цикла.
Есть ли способ проверить наличие невидимых диалоговых окон? Я не верю, что есть, но я хотел бы знать, как это сделать.
Я потратил немало времени на оптимизацию времени загрузки данных для рабочего стола и получил каждый процесс до менее чем секунды для загрузки данных. Есть две вещи, которые заставляют один из процессов работать дольше. Один из них говорит предупреждение с помощью SpeachSynth и может занимать до 60 секунд на блок кода. Другой - это электронная почта, которую я ввел в процесс асинхронной работы, чтобы он не зависал приложение, если есть тайм-аут. Но приложение зависает, даже если эти два элемента не обрабатываются.
Каскадные события. Это будут события, вызванные другими событиями? ЕСЛИ так, приложение не использует этот тип действия. Однако приложение ссылается на примерно 15 отдельных модулей, по крайней мере, из одного из фоновых работников. Я не верю, что это слишком высоко, но дайте мне знать, если это так. Я могу опубликовать некоторый псевдокод, если это проблема.
Application.Sleep() не используется, но Application.DoEvents() находится в ожидании определенного количества времени.
IEDim startTime As Date = Now Dim timePassed As TimeSpan = Now - startTime Do Until timePassed.TotalSeconds > 5 timePassed = Now - startTime Application.DoEvents() Loop
Основная причина неясности в том, что я надеялся, что этот вопрос был известен с TeamViewer или Radmin на основе типов элементов в приложении. IE SQL, COM-порты и BW.
Спасибо заранее.
Некоторые подсказки при приложении замораживания: 1) Бесконечная петля. 2) Невидимое диалоговое окно. 3) Очень долгая загрузка данных. 4) каскадные события запускаются один за другим в цикле. 5) Application.Sleep() - Итак, отложите отладчик и используйте режим линии по строкам, чтобы найти проблему. Может быть где угодно; без какого-либо подозрительного кода для начала, но просто очень смутное описание ничего не может сделать. –
Я больше не отвечаю на этот вопрос, никто никогда не говорит «спасибо», когда я объясню, что им нужно делать. Просто прочитайте http://blogs.msdn.com/b/dsui_team/archive/2012/10/31/debugging-windows-forms-application-hangs-during-systemevents.userpreferencechanged.aspx –
Сегодня я буду управлять windbg, чтобы увидеть что он придумал. Спасибо, Ханс! –