高内存使用情况在按键上播放带有NAudio的MP3

我正在使用C#,WPF和NAudio 。

当按下某个键时,我在应用程序exe播放embedded资源mp3

如果反复按下某个键,RAM的使用量将继续超过400MB并且永不下降。

即使调用GC ,在对象上使用Flush()Dispose()似乎也不会释放内存。

当我使用string路径而不是MemoryStream从硬盘驱动器上的external资源播放时,这种情况MemoryStream 。 它曾经保持大约50MB RAM。

内存使用情况


 public static MemoryStream ms = null; public static WaveStream wav = null; public static WaveOutEvent output = null; // Embedded Resource sound1.mp3 MemoryStream sound1 = new MemoryStream(Properties.Resources.sound1); // Key Press // if (e.Key == Key.Space) { ms = new MemoryStream(StreamToBytes(sound1)); wav = new Mp3FileReader(ms); output = new WaveOutEvent(); output.PlaybackStopped += new EventHandler(Media_Ended); output.Init(wav); output.Play(); } // MP3 Playback Ended // public static void Media_Ended(object sender, EventArgs e) { if (output.PlaybackState == PlaybackState.Stopped) { ms.Flush(); ms = null; wav.Close(); output.Dispose(); } } // Convert Stream to Byte Array // public static byte[] StreamToBytes(MemoryStream stream) { ... } 

流到字节数组
https://stackoverflow.com/a/1080445/6806643

我转换为字节数组回到新的流或播放将不会分层,如果一次播放2个声音将崩溃。

这是因为你点击空格键太快了:)

每次键单击都会用新值覆盖变量。 因此,当您在几秒钟内单击空格键10次时,它将创建10个资源。 但是你只参考最后创建的一个。 当Media_Ended将开始传入时,它将尝试仅处置最新创建的资源。