0

我正在使用 NAudio 在我的 .NET 4 应用程序中播放 Mp3 文件。首先我初始化 WaveOut:

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();

它从 FileStream 加载 MP3 并播放它。第二个按钮是停止:(代码)

waveOutDevice->Stop();

它只是停止播放。

当我启动我的应用程序时,它会占用 5.344 KB。

s1

但是当我点击 2 个按钮(播放然后停止)(想象我正在播放不同的 MP3)时,大约 10 次应用程序占用了 14.912 KB!

s2

而且我不知道如何释放这段记忆。要播放 MP3,我使用这些 NAudio 对象:

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

1 回答 1

1

通常,您应该确保您Dispose有任何实现 IDisposable 的 .NET 对象。特别是,您没有调用Dispose您的Mp3FileReader,这不仅会使文件保持打开状态,而且不会清理它打开的 ACM 句柄。

作为使用 .NET 对象的 C++ 程序员,您需要注意的另一件事是 .NET 使用垃圾收集,因此在您使用完某些东西后,内存使用量不会总是立即下降。相反,托管对象可用于垃圾收集,并且只有在垃圾收集器运行后才会释放它们的内存。

于 2012-11-24T07:31:15.110 回答