2013-08-30 4 views
0

Microsoft Media Foundation 라이브러리를 통해 비디오를 제어하기 위해 작성한 C++/CLI 라이브러리를 사용하는 .NET WPF 응용 프로그램이 있습니다.그래픽 드라이버로 인해 응용 프로그램에서 메모리 누수가 발생할 수 있습니까?

여러 장치에서 개인 바이트 성능 카운터를 모니터링 할 때이 카운터는 일정 기간 동안 안정적으로 유지됩니다. 그러나 인텔 GMA3650 그래픽이있는 시스템에서는이 성능 카운터가 응용 프로그램이 실행 중일 때 (비디오 재생 중) 눈에 띄는 안정적인 속도로 증가합니다. Windows 7 Basic 테마로 전환하여 Aero를 사용하지 않도록 설정 한 경우이 카운터는 작지만 꾸준히 늘어나는 stll로도 눈에 띄게 좋아집니다.

C++/CLI 코드는 주로 비디오 전송 제어 기능을 수행하고 시퀀스에서 비디오 세그먼트를 추가/제거합니다. IMFSourceReader::ReadSample을 통해 현재 동영상의 스냅 샷을 찍습니다.

내 응용 프로그램에서이 드라이버가 메모리 누수를 일으키는 것 같지만 가능하다면 확실치 않습니다. 모든 응용 프로그램은 응용 프로그램 실행시 OS에서 사용하는 기본 운영 체제 라이브러리 또는 라이브러리의 메모리 누수에 취약합니까?

+0

예, 메모리 누수가 발생할 수 있습니다! –

답변

1

프로세스 가상 주소 공간에 메모리를 할당 할 수있는 소프트웨어는 메모리 누수의 원인이 될 수 있습니다. 드라이버는 ZwOpenSection과 같은 기능을 통해 메모리를 할당 할 수 있습니다. 따라서 프로세스가 메모리를 누출시킬 수 있습니다.

이제 메모리가 누출 될 수 있다고해서 메모리 누출을 의미하지는 않습니다. 응용 프로그램에 버그가있을 가능성이 훨씬 큽니다. 첫 번째 단계는 프로파일 링하고 거기에서 누출되고 이동중인 메모리를 파악하는 것입니다.

+0

하지만 누출 (몇 주 동안)없이 많은 장치에서 응용 프로그램을 프로파일 링 했으므로이 그래픽 칩이 갑자기 방대한 누출로 새 장치에 나타납니다. 우리의 코드베이스는 크지 않고 실질적으로 모든 C++/CLI 코드는 지속적으로 호출됩니다. 동일한 코드가 한 장치에서 누출을 일으키지 만 다른 장치에서는 누출을 일으킬 수 있습니까? 우리 코드는 Aero on/off를 테스트하지 않으므로 코드를 변경하여 메모리 사용을 구체적으로 변경할 수 없습니까? – DaveO

+0

@DaveO 아마도 인텔 드라이버가 메모리를 할당하고 다른 드라이버가 할당하지 않는 곳에서 무료 메소드를 호출하는 것을 잊어 버리는 API 호출이있을 수 있습니다. 그것은 당신이 묘사하고있는 모든 증상들을 가질 것입니다. 참고 그것은 분명히 당신의 애플 리케이션에 버그가 아니라고 말하고있어, 난 그게 더 가능성이 높다고 믿는다 – JaredPar

+0

Microsoft Windows Media Player도 충돌하고이 드라이버를 사용하여 메모리를 누출합니다. – DaveO