2012-11-23 2 views
0

.NET 4 앱에서 NAudio를 사용하여 MP3 파일을 재생하고 있습니다. 우선 WaveOut을 초기화합니다..NET 4 C++ NAudio eating memory

IWavePlayer^ waveOutDevice = gcnew WaveOut(); 

그러면 두 개의 버튼이 있습니다. 재생 버튼 : (코드)

volumeStream = gcnew WaveChannel32(gcnew Mp3FileReader(gcnew IO::FileStream(path, IO::FileMode::Open, IO::FileAccess::Read, IO::FileShare::ReadWrite))); 
mainOutputStream = volumeStream; 
waveOutDevice->Init(mainOutputStream); 
waveOutDevice->Play(); 

MP3 형식의 FileStream을로드하고 재생합니다. 두 번째 버튼은 정지입니다. (코드)

waveOutDevice->Stop(); 

재생이 중지됩니다.

내 앱을 시작하면 5.344KB를 먹습니다. 내가이 개 버튼을 쳤을 때

s1

그러나 약 10 배의 응용 프로그램 (내가 다른 MP3의 재생있어 상상) (정지 후 재생은) 14.912 KB 먹는다!

s2

그리고 나는이 메모리를 해제하는 방법을 모르겠어요. 당신은으로 IDisposable을 구현 반드시 Dispose 모든 .NET 개체를해야한다, 원칙적으로

IWavePlayer^ waveOutDevice; 
WaveStream^ mainOutputStream; 
WaveChannel32^ volumeStream; 

답변

1

: 내가이 NAudio 객체를 사용하고 MP3를 재생하려면. 특히 Mp3FileReader에서 Dispose을 호출하지 않아도 파일을 열어 둘뿐만 아니라 열리는 ACM 핸들을 정리하지 않습니다.

.NET 객체를 사용하는 C++ 프로그래머로 알아야 할 다른 사항은 .NET에서 가비지 수집을 사용하므로 무언가를 사용한 후에 메모리 사용이 항상 즉시 중단되지는 않는다는 것입니다. 대신, 관리 객체는 가비지 수집을 위해 사용할 수있게되며 가비지 수집기가 실행 된 후에 만 ​​메모리가 해제됩니다.