2012-03-12 2 views
0

Forms.Images 및 Forms.WebBrowser와 같이 제어가 제한적인 여러 라이브러리에 의존하는 WinForms 응용 프로그램이 있습니다. 산발적 인 갑작스러운 메모리 누수로 인해 응용 프로그램이 손상됩니다. 시간이 지남에 따라 누적되는 메모리 누수가 아닙니다. 무작위로, 종종 다른 COM 예외이며 예측하기가 불가능합니다. 때로는 1 시간 후, 때로는 하루 후에 발생합니다.WinForms에서 메모리 누수 충돌 복구

현재 문제에 임시로 대처하기위한 나의 현재 방법은 다른 응용 프로그램이 GetProcessesByName()을 사용하여 첫 번째 응용 프로그램이 실행 중인지 확인하는 것입니다. 그러나 진행중인 프로세스가 때때로 충돌하지만 닫히지 않기 때문에 문제가됩니다. WER 메시지가 표시됩니다 (WER이 컴퓨터에서 꺼져 있음에도 불구하고). 더 나쁜 것은 첫 번째 프로세스가 충돌하고 메모리 누수가 발생하면 두 번째 프로세스 검사 응용 프로그램이 충돌한다는 것입니다. 그리고 나서 전체 shabang을 수동으로 재부팅 할 때까지 아무것도 작동하지 않습니다.

1) 프로세스 B가 프로세스 A를 실행하지 않고 프로세스 A가 프로세스 B의 충돌로 인한 메모리 문제를 겪지 않고 프로세스 A 검사를하는 효과적인 방법을 알고 있습니까?

2) 위와 같은 작업을 수행 할 수 없거나 너무 어려울 경우 WER 오류가 감지되면 프로세스를 다시 시작하는 프로세스가 WER 오류없이 실행 중인지 확인하는 데 사용할 수있는 타사 도구를 알고 있습니까? , 그리고 그 RAM을 초과 할 수 견딜 수 있습니까?

감사합니다.

답변

1

대신 문제를 해결하기 위해 노력하고, 당신이 먼저 그것을 해결하기 위해 시도해야합니다.

관리되지 않는 리소스를 사용하는 동안 expection 메모리 누수가 발생하는 경우 com 구성 요소가 던진 예외를 무시하고 catch 한 다음 처리하고 가능한 원인을 파악할 수없는 경우 다시 초기화해야합니다.

그 외에도 프로세스가 중단되지 않았지만 더 이상 반응하지 않는 것 같습니다. Process.Responding을 참조하십시오. 또는 메모리 사용량을 모니터링하고 주어진 제한을 초과하면이를 삭제하십시오. Process.WorkingSet64

0

일반적으로 명령 줄에서 프로세스를 종료하기 위해 pskill을 사용합니다. .net 서비스를 작성할 필요가별로 없습니다.

아마도 작고 간단한 프로세스 확인 앱이 실패했다는 사실은 내가 실제 시스템에 문제가 있다고 생각하게 만듭니다.

pslist & pskll