Вопрос

У меня есть приложение WinForms, которое полагается на несколько библиотек, над которыми у меня ограниченный контроль, такой как FORMS.IMAGES и FORMS.WEBBROWSER. Спорадические внезапные утечки памяти заставляют мою заявку с крахом. Это не чрезмерные утечки памяти, которые наращиваются. Они являются случайными, часто различными исключениями COM и невозможно предсказать - иногда они происходят через один час, иногда после дня.

Моя текущая методология, по крайней мере, временно справиться с проблемой, состоит в том, чтобы сделать другое приложение, проверьте, что первый работает с помощью GetProcessesByName (). Однако это проблематично, потому что текущий процесс иногда падает, но не закрывается. Я просто получаю сообщение WER (несмотря на то, что WER выключен на компьютер). Что хуже, в том, что когда первый процесс вылетает и утечка памяти накапливается, второе приложение для проверки процессов также сбивается. И тогда ничего не работает, пока я не перезагрузим весь шабанг.

1) Кто-нибудь знает эффективный способ выполнить процесс проверки, работает ли процесс B, не имея процесса, подверженного задачам памяти, которые сделали процесс B?

2) Если вышеизложенное невозможно, или слишком сложно, кто-нибудь знает какие-либо хорошие сторонние инструменты, которые могут быть использованы для обеспечения работы процессов без каких-либо непогашенных ошибок WER, которые перезагружают процессы, если обнаружены неисправности И это может выдерживать максимума ОЗУ?

Спасибо!

Это было полезно?

Решение

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

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

рядом с этим, кажется, ваш процесс не врезался, а скорее не отзывчиво.См. Процесс. Соответствует .Или мониторируйте использование памяти и убить его, когда он превышает данный предел Process.workingset64

Другие советы

Обычно я бы использовал Pskill, чтобы убить процесс из командной строки.Не очень нужно написать .NET Service, чтобы сделать это.

Однако тот факт, что ваше предположительно небольшое и простое приложение для проверки процесса не заставило меня поверить, что есть что-то не так с актуальной системой.

PSLIST & AMP;pskll

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top