jugs0101 Ответов: 0

.проблема чистой заморозить приложения WinForms


Ладно, у меня есть проблема, и я не жду ответа сразу. Мне нужна помощь, подбрасывание идей, если у кого-то найдется свободное время. Я нахожу, что разговоры о таких вещах могут помочь быстрее прийти к решению, но я застрял на том, чтобы с кем-то поговорить об этом!

У меня есть программа .Net 2.0 Winforms, которая работает на компьютерах людей. Он появляется в виде небольшой формы, например, в правом нижнем углу их монитора, направляя их на то, что делать дальше, своего рода способом оценки типа. Он работает постоянно, отслеживая их нажатия клавиш и щелчки мыши. Затем он сравнивает то, что они только что сделали, с набором вещей, которые они должны сделать, и если они делают это правильно, то они получают оценку за этот конкретный шаг, и программа переходит к следующему шагу, чтобы сравнить то, что вы делаете.

Все прекрасно работает для многих людей. Однако для одной компании, которая его использует, программа зависает.

Я ввел некоторые отладочные журналы в текстовый файл, чтобы видеть, какие функции вызываются и когда, любые исключения, которые могут возникнуть. Это не имеет никакой закономерности, когда происходит замораживание.
Я проверил журналы событий Windows, которые просто говорят мне, что программа замерла. Я проверил, какие программы у них работают в фоновом режиме и какие ресурсы доступны на компьютере во время его работы.

Я пробовал воспроизвести на своей машине и не могу.

Итак, очевидно, Вы читаете это и думаете: "чем, черт возьми, я могу вам помочь?" Ну, скажите мне, что вы могли бы искать или как вы могли бы подойти к этому. Здесь слишком много кода, чтобы размещать его здесь, так как я не могу точно определить конкретную область. Может быть, есть инструмент, который можно запустить на их компьютере, например, они не будут возражать, если я сделаю это с удаленного сеанса.

Существует несколько потоков, происходящих, и мьютексы используются на этом пути. Вполне возможно, что один из них заперт и не отпущен. Я обновил код, чтобы попытаться убедиться, что это уже не произойдет.

Я ценю, что это не вопрос типа "как мне заказать дату и время в DataGridView", но любые идеи будут наиболее ценны.

Джулиан

Что я уже пробовал:

Подробный журнал отладки в текстовый файл
Проверил Журналы Событий Windows
Обновленный код в возможной проблемной области
Проверил фоновые ресурсы + антивирусные журналы - безрезультатно

Kornfeld Eliyahu Peter

Есть ли у вас какие-то причины в четном журнале для замораживания?
У вас есть только один экземпляр вашего приложения?
Сколько у вас мьютексов?

jugs0101

Привет Корнфельд,

Спасибо, что откликнулись! В ответ на ваши вопросы:

1. в моем собственном журнале событий (to file) или журнале событий Windows нет никаких указаний на замораживание. Windows просто указывает, что программа замерзла (боюсь, у меня нет точного текста передо мной).

2. Да, существует только один экземпляр запущенной программы. Я подтвердил это, фактически наблюдая, как клиент повторяет проблему на встрече GoTo.

3. я считаю, что существует 2 отдельных случая возникновения мьютексов, которые блокируются и освобождаются на различных этапах.

Следует отметить, что изначально я не писал код, а разработчик, который это сделал, больше не работает в компании.

Овации.

Kornfeld Eliyahu Peter

Я помню проблему в мой день C++ (не использовал мьютекс в .NET), что мы решили ее, заблокировав экземпляры мьютекса всегда в одном и том же порядке, иначе это может привести к блокировке...
Вполне возможно, что ваши потоки запускаются в чередующихся порядках и для этого блокировка появляется в разных порядках, поэтому некоторые из них не будут выпущены правильно и в следующий раз, когда поток ударится, он не сможет получить блокировку и замерзнет...

jugs0101

Спасибо Корнфельду.

Я думаю, что я точно нарисую, какие потоки создаются и где, как долго они работают (похоже, что 3 идентификатора потоков используются во время вызова мьютекса, поэтому они находятся в циклах на протяжении всей продолжительности, если вы понимаете мой дрейф).

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

Это ваше понимание того, что блокировка мьютекса блокируется только на определенном потоке?

Джулиан

Kornfeld Eliyahu Peter

Регистрируйте также запрос на блокировку с именем мьютекса...
Насколько я помню, блокировка мьютекса на вторичном потоке (а не на основном) может привести именно к тому, что вы видите...

jugs0101

Спасибо, имя-это одна вещь, которую я еще не записал. Я дам вам знать, как это происходит.

Спасибо за ваши мысли.

Джулиан

Graeme_Grant

Я бы регистрировал onEnter и onExit для замков. Таким образом, если где-то есть тупик, то у вас будет одна или несколько сломанных пар...

jugs0101

Спасибо. Да, именно это я и делал. Он часто вызывается, и мьютекс завернут в класс, так что у меня есть больше контроля там, чтобы добавить идентификаторы, когда класс создается, что его создало, и счетчик, чтобы указать, какие блокировки заблокированы и освобождены.

Я дам вам знать, как это делается!

Овации.

David_Wimbley

Поскольку у вас есть несколько хороших комментариев по вопросам, связанным с программным обеспечением, еще одна вещь, о которой стоит подумать, - это может быть проблема с оборудованием? Может проблема в компании есть мощный ПК? Я сомневаюсь, что это так, но это может быть что-то, что нужно принять во внимание, поскольку ваш компьютер и другие клиенты не имеют проблем, но одна компания кажется проблематичной.

Кроме того, может ли быть антивирус или какая-то другая третья сторона, вмешивающаяся в работу компьютеров проблемной компании/вашего приложения?

jugs0101

Привет Дэвид,

Да, спасибо за это. Я проверил спецификацию машины, и, насколько я могу судить, все в порядке. Они также не работают над Citrix или чем-то подобным. Я также проверил антивирус. Вполне возможно, что это может быть проблемой, но я не вижу в его журналах ничего, что указывало бы на то, что он вмешался.

Замораживание также не происходит в какой-то конкретной точке во время работы программного обеспечения, это немного случайно. Я наблюдал, как это происходит с ними, и я проверил ресурсы компьютера, когда это произошло, и снова они выглядели нормально.

Я также исследую, может ли вмешиваться другое программное обеспечение, которое у них работает. Единственное, что я знаю, что они работают в фоновом режиме, - это Worldox DMS. Я знаю, что они довольно вовлечены в программное обеспечение (я сам его разработал). Но я не уверен, как это сделать, если это вообще помешало.

В любом случае, я, вероятно, получу еще одну встречу с ними и перепроверю все это. Беда в том, что когда я это делаю, то обычно все работает нормально. Трудный.

Спасибо за Ваш вклад. Приятно поболтать.

Джулиан

0 Ответов