2011-03-28 2 views
0

양식 중 하나에 IE 컨트롤이 있고 응용 프로그램이 처음에 메모리 크기가 약 9MB로 시작되는 VB.NET 응용 프로그램이 있지만 IE 양식이 시작되면 소비되는 메모리가 27MB로 증가하고, 해당 양식이 닫히면 메모리가 3-4MB 만 감소하므로 IEFrame에 할당 된 메모리가 자동으로 할당 해제되지 않는 이유는 무엇입니까? 이 문제를 해결하기위한 해결 방법이 있습니까? 가능한 경우 별도의 프로세스로 양식을 시작하는 것이 도움이됩니다.VB.NET 양식을 별도의 프로세스로 시작하십시오.

+2

** 가비지 수집 **이라고합니다. 메모리를 즉시 할당 해제하는 것은 아닙니다. 이것을 별도의 프로세스로 시작하는 것은 아무 것도 고쳐 내지 않을 것입니다. 나는 최근에 이것에 많이 링크되어있는 것처럼 느껴지지만, [나는 이미 당신의 문제를 여기에서 충분히 논의했다.] (http://stackoverflow.com/questions/5191897/how-to-release-the-occupied-memory/5192350 # 5192350). –

+0

@Cody Grey : 가비지 컬렉션에 대한 심층적 인 정보를 제공해 주셔서 감사합니다. 가비지 수집에 대한 개요를 이미 알고 있었기 때문에. – Kushal

답변

1

문제가있는 경우 해당 양식을 별도의 응용 프로그램에 두지 않는 이유는 무엇입니까? 두 앱간에 어떤 데이터라도 전달할 수있는 방법은 많습니다.

+0

IE 컨트롤이있는 양식 만 별도의 응용 프로그램으로 만들면 응용 프로그램의 설치가 번거로울 수 있으므로 필자가 의존하는 양식이 외부 요인인지 실제로 확인해야합니다. – Kushal

+0

설치가 까다로운 이유는 무엇입니까? 모든 .NET 라이브러리가 이미 설치되었을 것입니다. 그것은 같은 디렉토리에 복사 된 또 다른 EXE입니다. 도움이 될만한 다른 트릭이있을 수 있지만, 실제로 별도의 프로세스에서 무언가를 실행하고 싶다면 그렇게하는 것이 가장 쉬운 방법입니다. –

+0

별도의 응용 프로그램이 .NET 언어로 작성된 경우에도 동일한 "문제"가 발생합니다. 가비지 수집은 사용하지 않는 메모리를 즉시 회수하지 않습니다. 그건 의도적으로입니다. 이를 두 개의 개별 응용 프로그램으로 분할하면 개발 및 설치시 불필요한 복잡성이 발생합니다. –

2

양식을 올바르게 처리하려면 가비지 수집기가 결국 메모리를 확보해야합니다. 별도의 프로세스에서 IE 컨트롤을 실행하면 안됩니다. 그러나 IE 7을 사용하는 경우 메모리 누수에 대해서는 this question을 읽어보십시오.

+0

닫기 단추를 사용하여 양식을 정상적으로 닫았으며 IE 9을 사용하고 있습니다. – Kushal

+0

양식이 닫을 때 처리되지 않는 경우 두 가지 조건이 있습니다 : (1) 그것이 다중 문서 인터페이스 (MDI) 응용 프로그램의 일부인 경우, 양식이 보이지 않습니다. (2) ShowDialog를 사용하여 양식을 표시했습니다. 이 경우 양식에서 수동으로 Dispose를 호출해야합니다. –

+0

좋아요, 저는 ShowDialog를 사용하여 폼을 호출했고 자식 폼이 모달로 시작되었지만 여전히 메모리 소비가 지속될 때 부모 폼의 포커스에서 수동으로 Dispose 메서드를 호출했습니다. – Kushal

0

아직 할당 된 메모리는 전혀 문제가되지 않을 수 있습니다. 컴퓨터에 사용 가능한 메모리가 충분하면 .NET 가비지 수집기가 실행되어 정리되지 않습니다. 당신이 메모리를 필요로 할 때 만 GC는에 시작된다

당신이 당신이 다음을 수행 할 수있는 누수가 있는지 확인하려면 :.

  1. 당신은 어떤 방법으로 형식에 대한 참조가 없는지 확인 .
  2. 전화 GC.Collect를() 메모리가 여전히
  3. 을 주장하는 경우
  4. 참조

최종 빌드에서하는 GC.Collect()를 넣지 마십시오; 당신이 유령을 사냥하고 있지 않은지 확인하는 것입니다.

+0

'GC.Collect()'를 사용했지만 메모리가 여전히 요구되지 않았습니다. – Kushal

관련 문제