【问题标题】:.NET 4 C++ NAudio eating memory.NET 4 C++ NAudio 吃内存
【发布时间】:2012-11-23 07:15:13
【问题描述】:

我正在使用 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。

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

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

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

【问题讨论】:

    标签: .net naudio


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      相关资源
      最近更新 更多