windows-runtime – Windows Phone 8.1中的媒体管道是否已损坏?

前端之家收集整理的这篇文章主要介绍了windows-runtime – Windows Phone 8.1中的媒体管道是否已损坏?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
由于存在大量内存管理问题,Windows Phone 8.1中的媒体管道似乎已被破坏.

当您创建使用IMediaSource在Windows Phone Runtime 8.1中传输音频的后台音频应用程序时,应用程序的组件最终会在某些情况下抛出OutOfMemoryException甚至StackOverflowException.查看内存转储时,里面有很多未收集的垃圾.

讨论已于MSDN forums开始,并取得了这一结论.我已经创建了一个WPDev UserVoice suggestion,以便Windows Phone团队能够注意到这一点,但我仍然希望我(以及来自MSDN论坛的其他人)谁错了并且有解决方案.

我也有一个小的CodePlex project也受此影响,实际上有一个关于这个确切问题的issue report.

我希望在社区的帮助下,这个问题可以解决或直接传递给Microsoft开发团队进行调查和消除.谢谢!

更新1:

有一个kind of workaround for StackOverflowException,但它对OutOfMemoryException没有帮助.

解决方法

好的,所以似乎问题实际上是在.NET中字节数组的生命周期.

为了解决内存问题,请使用Windows运行时的Windows.Storage.Streams.IBuffer.不要以任何形式创建许多新的.NET字节数组,既不是简单的new byte [],也不是使用System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBuffer类,因为它是IBuffer接口的托管实现.

这些字节数组一旦被分配,由于被OverlappedData结构固定并且溢出后台音频任务的内存阈值而长寿. IBuffers(真正的Windows运行时版本,如Windows.Storage.Streams.Buffer类)包含一旦IBuffer的引用计数达到0(零)就被释放的本机数组,它们不依赖于GC.

我发现的是这个问题不仅仅是背景音频特有的.实际上,我已经看到很多关于类似问题的其他问题.解决方案是尽可能使用Windows运行时后端,因为它是非托管的,并且只要它们没有引用就释放资源.

感谢@Soonts指出我正确的方向!

猜你在找的Windows相关文章