2012-11-23 85 views
0

我使用n音訊在我的.NET 4的應用程序來播放MP3文件。首先我初始化WaveOut:.NET 4 C++ n音訊吃內存

IWavePlayer^ waveOutDevice = gcnew WaveOut(); 

然後我有2個按鈕。播放按鈕:(代碼)

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.344 KB。

s1

但是,當我打2個按鍵(播放,然後停止)(想象一下,我打不同的MP3的)大約10倍的應用吃14.912 KB!

s2

而且我不知道如何釋放這個內存。 要播放我使用這些n音訊物件MP3:

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

回答

1

作爲一項規則,你應該做的是實現IDisposable確保您Dispose任何.NET對象。尤其是,你是不是在你的Mp3FileReader調用Dispose,這不僅將保留文件打開,但不會清理ACM處理它打開。

你需要知道使用.NET對象作爲一個C++程序員的另一件事是,.NET使用垃圾收集,所以內存的使用也不會總是立即下井你使用的東西完成之後。相反,管理對象成爲可進行垃圾回收,一旦垃圾收集器運行他們的記憶纔會釋放。